JavaRush /Java Blog /Random-TK /“CopyOnWriteArraySet” -i Java-da mysal bilen nädip ulanma...
Lam-lam
Dereje

“CopyOnWriteArraySet” -i Java-da mysal bilen nädip ulanmaly (terjime)

Toparda çap edildi
CopyOnWriteArraySetBu 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 frameworkOlar bukjanyň bir bölegi we ýerleşýär java.util.concurrent. “CopyOnWriteArraySet” -i Java-da mysal (terjime) bilen nädip ulanmaly - 1CopyOnWriteArraySetDiň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 CopyOnWriteArraySetwe programmanyň ömrüniň dowamynda başga birnäçe sapaklara girip bilersiňiz. SetBu 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, CopyOnWriteArraySetulanyp amala aşyrylmagydyr CopyOnWriteArrayList. CopyOnWriteArraySetBu, ä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 Setiterator 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 CopyOnWriteArraySetulanyň we esasy maksat wagtal-wagtal täzelenen maglumatlary okamakdyr. setMundan başga-da, gaýtalama wagtynda elementleri aýyrmak isleseňiz, ýerine ýetirijini goldamaýar remove()we java.lang.UnsupportedOperationExceptionaş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, CopyOnWriteArraySetbu 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;

/**
 * Java program to demonstrate how to use CopyOnWriteArraySet in Java. Remember,
 * CopyOnWriteArraySet doesn't support remove() operation.
 *
 * @author Javin Paul
 */
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);

            //itr.remove(); // not allowed, throws UnsupportedOperationException
        }
    }
}

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

CopyOnWriteArraySetJDK 1.5-de goşulan Collectionwe 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 Setiç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” -ni Java-da mysal (terjime) bilen nädip ulanmaly - 2
  1. CopyOnWriteArraySetProgrammalar üçin iň amatlysy:

    • Ululyklary Setkiçi bolup galýar.
    • Amallar read-onlyobýektleri üýtgedýän amallardan ep-esli ýokarydyr.
    • Gezelenç wagtynda sapaklaryň arasyndaky päsgelçiligiň öňüni almaly Set.
  2. Anotherene bir artykmaçlygy CopyOnWriteArraySetsapak howpsuzlygy. Bu ýygyndy ylalaşygy goldaýar.
  3. Üýtgeşik amallar (goşmak, üýtgetmek, pozmak we ş.m.) gymmat, sebäbi adatça esasy massiwiň hemmesini göçürmegi talap edýär.
  4. Iteratorlar mutasiýa pozmak amalyny goldamaýarlar.
  5. 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 CopyOnWriteArraySetJava-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, Listelementleriň tertibi möhümdir we dublikatlary bolup biler. Düzgünsiz bolsa Set, obýektleriň köpelmegine ýol bermeýär. CopyOnWriteArraySetMunuň ýö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
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION