CopyOnWriteArraySet
هي ڪلاس جو ننڍو ڀاءُ آهي
CopyOnWriteArrayList
. اهي JDK 1.5 ۾ شامل ڪيل طبقن جو هڪ خاص سيٽ آهن انهن جي وڌيڪ مشهور ڪزن سان گڏ
ConcurrentHashMap
. اهي حصو آهن
concurrent collection framework
۽ پيڪيج ۾ واقع آهن
java.util.concurrent
.
CopyOnWriteArraySet
بهترين موزون صرف پڙهڻ لاءِ گڏ ڪيل مجموعن لاءِ جيڪي سائيز ۾ ڪافي ننڍا آهن نقل ڪرڻ جي صورت ۾ جيڪڏهن ڪجهه ترميمي عمل ٿين. مثال طور، توھان استعمال ڪري سگھوٿا
CopyOnWriteArraySet
ھڪڙي اعتراض کي ذخيرو ڪرڻ لاءِ جڏھن ايپليڪيشن شروع ٿئي، ۽ ڪيترن ئي ٻين موضوعن تائين رسائي حاصل ڪري سگھوٿا ان اعتراض کي ايپليڪيشن جي سڄي زندگي دوران. جيڪڏهن هن وقت ۾ ڪا نئين رياست يا شئي اچي ٿي، ته اها به ٿي سگهي ٿي هن ۾ شامل ڪئي وڃي
Set
، نئين سر ٺاهڻ جي قيمت تي. ڄاڻڻ لاءِ سڀ کان اهم شين مان هڪ
CopyOnWriteArraySet
اهو آهي ته اهو استعمال ڪيو ويو آهي
CopyOnWriteArrayList
. هن جو مطلب آهي ته اهو
CopyOnWriteArraySet
پڻ سڀني بنيادي ملڪيتن کي حصيداري ڪري ٿو
CopyOnWriteArrayList
. ياد رکڻ لاءِ هڪ ٻي اهم شيءِ اها آهي ته هن مجموعي جي ڪلاس جا آئٽرٽر سپورٽ نٿا ڪن
remove()
. انضمام جي دوران هڪ عنصر کي هٽائڻ جي ڪوشش جي نتيجي ۾ ٻاهر نڪرندو
UnsupportedOperationException
. اهو عمل دوران رفتار کي يقيني بڻائڻ لاء ڪيو ويو آهي. هڪ آئٽرٽر استعمال ڪندي هن عمل درآمد کي تيز ڪرڻ
Set
بلڪل تيز آهي ۽ ٻين موضوعن جي مداخلت کان بچي ٿو. هلائڻ لاءِ، آئٽرٽر ان صف جي سنيپ شاٽ تي ڀاڙين ٿا جيڪو ورتو ويو هو جڏهن آئيٽرٽر ٺاهيو ويو هو. مختصر ۾، استعمال ڪريو
CopyOnWriteArraySet
جيڪڏھن اھو
set
نقل ڪرڻ لاءِ ڪافي ننڍو آھي جڏھن شيون شامل ڪرڻ، ترتيب ڏيڻ، يا حذف ڪرڻ وقت، ۽ بنيادي مقصد آھي وقتي طور تي اپڊيٽ ٿيل ڊيٽا کي پڙھڻ. پڻ، جيڪڏھن توھان چاھيو ٿا ختم ڪرڻ جي دوران عناصر، ھن عمل درآمد کي استعمال نه ڪريو ڇو ته ان جو ريٽٽر سپورٽ نٿو ڪري
remove()
، ۽ اڇلائي ٿو
java.lang.UnsupportedOperationException
، جيئن ھيٺ ڏيکاريل آھي:
[RAJ] Event received : FOUR
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(Unknown Source)
at Publisher.notifySubs(HelloHP.java:43)
at HelloHP.main(HelloHP.java:23)
CopyOnWriteArraySet مثال جاوا ۾
هتي هڪ تيار ڪيل جاوا پروگرام آهي جيڪو ڏيکاري ٿو ته ڪيئن استعمال ڪجي
CopyOnWriteArraySet
. اسان جي مثال ۾، اسان پبلشر-
subscriber نموني استعمال ڪيو ان جي استعمال کي ڏيکارڻ لاء. ايپليڪيشن جي لانچ دوران اڪثر رڪنيت حاصل ڪئي وئي آهي ۽ پبلشر جو بنيادي ڪم انهن کي ڳڻڻ ۽ انهن کي ڪنهن به تازه ڪاري جي اطلاع ڏيڻ آهي. رڪنيت جو اضافو ۽ حذف ٿي سگھي ٿو وقت بوقت. جيئن ته اسان کي هڪ تيز بائي پاس جي ضرورت آهي،
CopyOnWriteArraySet
اهو هڪ سٺو انتخاب آهي، خاص طور تي گهڻن موضوعن واري ماحول ۾ جتي هڪ ٿريڊ سبسڪرائبر شامل ڪري سگهي ٿو جڏهن ته ٻيو ٿريڊ اپڊيٽ سنڀاليندو آهي.
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArraySet;
public class CopyOnWriteArraySetDemo{
public static void main(String args[]) {
Publisher cricNext = new Publisher();
SubScriber raj = new SubScriber("RAJ");
SubScriber adom = new SubScriber("ADOM");
cricNext.addSubscriber(raj);
cricNext.addSubscriber(adom);
cricNext.notifySubs("FOUR");
cricNext.notifySubs("SIX");
}
}
class Publisher {
private CopyOnWriteArraySet setOfSubs = new CopyOnWriteArraySet();
public void addSubscriber(SubScriber sub) {
setOfSubs.add(sub);
}
public void notifySubs(String score) {
Iterator itr = setOfSubs.iterator();
while (itr.hasNext()) {
SubScriber sub = itr.next();
sub.receive(score);
}
}
}
class SubScriber {
private String _name;
public SubScriber(String name) {
this._name = name;
}
public void receive(String score) {
System.out.printf("[%s] Event received : %s %n", _name, score);
}
}
پيداوار:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX
ڇا ياد ڪجي
CopyOnWriteArraySet
Collection
۽ انٽرفيس کي لاڳو ڪري ٿو
Set
، انهي سان گڏ، JDK 1.5 ۾ شامل ڪيو ويو،
Set
'a،
EnumSet
. اهو پڻ
Set
هڪ آهي جيڪو
CopyOnWriteArrayList
پنهنجي سڀني عملن لاء اندروني استعمال ڪري ٿو. اهڙيء طرح، هن طبقي جي ساڳئي بنيادي ملڪيتن کي حصيداري ڪري ٿو. جيئن ته اهو نه آهي
SortedSet
، عناصر جي ترتيب جي ضمانت نه آهي تکرار دوران.
-
CopyOnWriteArraySet
ايپليڪيشنن لاءِ بهترين مناسب جتي:
Set
جي سائيز ننڍي رھندا آھن.
- آپريشنز
read-only
خاص طور تي عملن کان بھترين آھن جيڪي شيون تبديل ڪن ٿيون.
- توهان کي traversal دوران سلسلي جي وچ ۾ مداخلت کي روڪڻ گهرجي
Set
.
- ٻيو فائدو
CopyOnWriteArraySet
ڌاڳو حفاظت آهي. هي مجموعو مطابقت جي حمايت ڪري ٿو.
- ميوٽيٽيڪل آپريشن (شامل ڪرڻ، تبديل ڪرڻ، حذف ڪرڻ، وغيره) قيمتي هوندا آهن ڇاڪاڻ ته اهي عام طور تي پوري بنيادي صف کي نقل ڪرڻ جي ضرورت هونديون آهن.
- آئيٽرٽر ميوٽيٽيڪل ڊليٽ آپريشن کي سپورٽ نٿا ڪن.
- هڪ آئٽرٽر استعمال ڪندي ٽرورسل تمام تيز آهي ۽ ان دوران ٻين موضوعن جي مداخلت کي خارج ڪيو ويو آهي. هلائڻ لاءِ، آئٽرٽر ان صف جي سنيپ شاٽ تي ڀروسو ڪن ٿا جيڪو ورتو ويو هو جڏهن آئيٽرٽر ٺاهيو ويو هو.
اهو سڀ ڪجهه
CopyOnWriteArraySet
جاوا ۾ استعمال بابت آهي. جيئن مون چيو، هو ننڍو ڀاءُ آهي
CopyOnWriteArrayList
. تنهن ڪري جيڪڏهن توهان انهن مان گهٽ ۾ گهٽ هڪ سمجهي، توهان ٻئي کي استعمال ڪري سگهو ٿا. فرق صرف اهو آهي ته هڪ آهي
List
''۽ ٻيو
Set
آهي''، تنهنڪري هي جاوا ۾ انهن ڊيٽا جي جوڙجڪ جي وچ ۾ سڀني فرقن کي ورثي ۾ داخل ڪري ٿو. مثال طور،
List
عناصر جو حڪم اهم آهي ۽ شايد نقلن تي مشتمل هجي. جڏهن ته
Set
غير ترتيب ڏنل، اهو اجازت نه ڏيندو آهي شين جي نقل ڪرڻ جي. هميشه ياد رکو ته
CopyOnWriteArraySet
هي هڪ خاص
Collection
طبقو آهي. اهو صرف استعمال ڪيو وڃي جڏهن حالتون سازگار آهن. ڪنهن ٻئي صورت ۾، توهان استعمال ڪري سگهو ٿا عام-مقصد لاڳو ڪرڻ. مثال طور
HashSet
،
LinkedHashSet
يا هم وقت سازي ڪليڪشن ڪلاس. اصل:
مثال سان جاوا ۾ CopyOnWriteArraySet ڪيئن استعمال ڪجي
GO TO FULL VERSION