CopyOnWriteArraySet
Bu synpyň kiçi dogany
CopyOnWriteArrayList
. Bular has meşhur doganoglany bilen birlikde JDK 1.5-de goşulan ýöriteleşdirilen sapaklar toplumy
ConcurrentHashMap
.
concurrent collection framework
Olar bukjanyň bir bölegi we ýerleşýär
java.util.concurrent
.
CopyOnWriteArraySet
Diňe käbir okaýyş kolleksiýalary üçin iň amatlysy, käbir üýtgetme amallary ýüze çyksa göçürmek üçin ululygy az. Mysal üçin, programma başlanda bir obýekti saklamak üçin ulanyp bilersiňiz
CopyOnWriteArraySet
we programmanyň ömrüniň dowamynda başga birnäçe sapaklara girip bilersiňiz.
Set
Bu döwürde täze bir ýagdaý ýa-da obýekt gelse, täze massiw döretmek bahasy bilen bu ýagdaýa hem goşulyp bilner . Bilmeli iň möhüm zatlaryň biri,
CopyOnWriteArraySet
ulanyp amala aşyrylmagydyr
CopyOnWriteArrayList
.
CopyOnWriteArraySet
Bu, ähli esasy häsiýetlerini hem paýlaşýandygyny aňladýar
CopyOnWriteArrayList
. Collectionatda saklamaly ýene bir möhüm zat, bu kolleksiýa synpynyň iteratorlary goldamaýar
remove()
. Integrasiýa wagtynda bir elementi aýyrmaga synanyşmak, has täsirli bolar
UnsupportedOperationException
. Bu gezelenç wagtynda tizligi üpjün etmek üçin edilýär. Bu ýerine ýetirijini
Set
iterator ulanyp gezmek gaty çalt we beýleki sapaklaryň päsgelçiliklerinden gaça durýar. Işlemek üçin iteratorlar iterator döredilende alnan massiwiň suratlaryna bil baglaýarlar. Gysgaça aýdanyňda , obýektleri goşanyňyzda, sazlanyňyzda ýa-da pozanyňyzda göçürmek üçin ýeterlik bolmadyk bolsa
CopyOnWriteArraySet
ulanyň we esasy maksat wagtal-wagtal täzelenen maglumatlary okamakdyr.
set
Mundan başga-da, gaýtalama wagtynda elementleri aýyrmak isleseňiz, ýerine ýetirijini goldamaýar
remove()
we
java.lang.UnsupportedOperationException
aşakda görkezilişi ýaly zyňýar:
[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)
Java-da CopyOnWriteArraySet mysaly
Ine, nädip ulanmalydygyny görkezýän taýýar Java programmasy
CopyOnWriteArraySet
. Mysal üçin, ulanylyşyny görkezmek üçin neşirýatçy
-abonent nagşyny ulandyk. Abonentleriň köpüsi, programma açylanda ýazylýar we neşirçiniň esasy wezipesi olary sanamak we täzelenmeler barada habar bermek. Abonent goşmaçalary we pozulmalary wagtal-wagtal bolup biler. Bize çalt aýlanyp geçmek zerurlygy sebäpli,
CopyOnWriteArraySet
bu bir gowy sapak, esasanam bir sapak abonent goşup bilýän, başga bir sapak täzelenmeleri dolandyrýan köp sapakly gurşawda.
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);
}
}
Çykyş:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX
Whatatda saklamaly zatlar
CopyOnWriteArraySet
JDK 1.5-de goşulan
Collection
we interfeýsleri
Set
, şeýle hem başga bir adaty ýerine ýetiriş bilen bilelikde ýerine ýetirýär
Set
.
EnumSet
Şeýle hem, ähli amallary üçin
Set
içerki ulanýanlardan biridir .
CopyOnWriteArrayList
Şeýlelik bilen, bu synpyň şol bir esasy häsiýetlerini paýlaşýar. Notok bolany üçin
SortedSet
, gaýtalanma wagtynda elementleriň tertibi kepillendirilmeýär.
-
CopyOnWriteArraySet
Programmalar üçin iň amatlysy:
- Ululyklary
Set
kiçi bolup galýar.
- Amallar
read-only
obýektleri üýtgedýän amallardan ep-esli ýokarydyr.
- Gezelenç wagtynda sapaklaryň arasyndaky päsgelçiligiň öňüni almaly
Set
.
- Anotherene bir artykmaçlygy
CopyOnWriteArraySet
sapak howpsuzlygy. Bu ýygyndy ylalaşygy goldaýar.
- Üýtgeşik amallar (goşmak, üýtgetmek, pozmak we ş.m.) gymmat, sebäbi adatça esasy massiwiň hemmesini göçürmegi talap edýär.
- Iteratorlar mutasiýa pozmak amalyny goldamaýarlar.
- Iterator ulanyp gezelenç gaty çalt we bu döwürde beýleki sapaklaryň päsgelçiligi aýrylýar. Işlemek üçin iteratorlar iterator döredilende alnan massiwiň suratlaryna bil baglaýarlar.
Bularyň hemmesi
CopyOnWriteArraySet
Java-da ulanmak hakda. Aýdyşym ýaly, ol kiçi dogany
CopyOnWriteArrayList
. Şonuň üçin iň bolmanda birine düşünýän bolsaňyz, beýlekisini ulanyp bilersiňiz. Onlyeke-täk tapawut, biri
List
'', beýlekisi
Set
'', şonuň üçin bu Java-daky bu maglumatlar gurluşlarynyň arasyndaky ähli tapawutlary miras almagy göz öňünde tutýar. Mysal üçin,
List
elementleriň tertibi möhümdir we dublikatlary bolup biler. Düzgünsiz bolsa
Set
, obýektleriň köpelmegine ýol bermeýär.
CopyOnWriteArraySet
Munuň ýöriteleşdirilen synpdygyny elmydama ýadyňyzdan çykarmaň
Collection
. Diňe şertler amatly bolanda ulanylmaly. Islendik ýagdaýda, umumy maksatly durmuşa geçirmeleri ulanyp bilersiňiz. Mysal üçin,
HashSet
ýa
LinkedHashSet
-da sinhronlaşdyrylan ýygnamak synplary. Asyl:
CopyOnWriteArraySet-i mysal bilen Java-da nädip ulanmaly
GO TO FULL VERSION