CopyOnWriteArrayList
Az add , set , remove műveletek egy adott gyűjteményben a belső tömb új másolatát eredményezik. Ez biztosítja, hogy ne kapjuk el a ConcurrentModificationException kivételt .
Ne feledje, hogy egy tömb másolásakor csak az objektumokra való hivatkozások másolódnak, beleértve a nem szálbiztos elemek mezőihez való hozzáférést is. Az ilyen gyűjtemények a legalkalmasabbak olyan esetekben, amikor minimális számú írási művelet van.
![](https://cdn.codegym.cc/images/article/dd30e3f5-509c-479f-acb2-47f72f63b032/512.jpeg)
A CopyOnWriteArrayList<E> az ArrayList szálbiztos analógja, amelyet CopyOnWrite algoritmusok alapján valósítottak meg. A további módszerek és a konstruktor leírása alább található:
CopyOnWriteArrayList(E[] toCopyIn) | Egy konstruktor, amely egy tömböt vesz bemenetként. |
int indexOf(E e, int index) | Az első talált elem indexét adja vissza, az adott indextől kezdve. |
int lastIndexOf(E e, int index) | Visszaadja a fordított keresés során elsőként talált elem indexét, az adott indextől kezdve. |
logikai addIfAbsent(E e) | Adjon hozzá egy elemet, ha az nem szerepel a gyűjteményben. Az egyenlőség módszert használják az elemek összehasonlítására . |
int addAllAbsent(A gyűjtemény<? kiterjeszti az E>-t c) | Adjon hozzá elemeket, ha nincsenek a gyűjteményben. A hozzáadott elemek számát adja vissza. |
ConcurrentMap Interface
A HashMap és TreeMap továbbfejlesztett implementációi a többszálú feldolgozás és a méretezhetőség támogatásával.
![](https://cdn.codegym.cc/images/article/b93ad73c-488f-4c46-91c8-9a76c7337e1a/1024.jpeg)
A ConcurrentMap<K, V> egy olyan interfész, amely a térképet további atomi műveletekkel bővíti.
V putIfAbsent (K kulcs, V érték) | Csak akkor ad hozzá új kulcs-érték párt, ha a kulcs nincs a gyűjteményben. Az adott kulcs előző értékét adja vissza. |
logikai eltávolítás (objektumkulcs, objektumérték) | Csak akkor távolítja el a kulcs-érték párt, ha az adott kulcs egyezik a térképen megadott értékkel. Igaz értéket ad vissza, ha az elemet sikeresen eltávolították. |
logikai csere (K kulcs, V régiérték, V újérték) | Kulcsonként csak akkor cseréli le a régi értéket az újra, ha a régi érték megegyezik a térképen megadott értékkel. Igaz értéket ad vissza, ha az értéket újra cserélték. |
V csere (K kulcs, V érték) | Kulcs által csak akkor cseréli le a régi értéket egy újra, ha a kulcs hozzá van rendelve bármely értékhez. Az adott kulcs előző értékét adja vissza. |
ConcurrentHashMap<K, V> - itt az adatok szegmensek formájában jelennek meg, amelyek kulcskivonatokra vannak felosztva. Ennek eredményeként, ha hozzáférésre van szüksége, akkor a szegmens zárolva van, nem az objektum. Az iterátorok nem dobnak fel ConcurrentModificationException-t , és egy adott időtartamra vonatkoznak az adatok.
A ConcurrentHashMap megvalósításai
ConcurrentHashMap<K, V> - itt az adatok szegmensek formájában jelennek meg, kulcskivonatokra lebontva. Ennek eredményeként az adathozzáférést szegmensek zárják, nem pedig egy objektum. Ezenkívül az iterátorok egy adott időszeletre vonatkozó adatokat képviselnek, és nem dobnak ConcurrentModificationException -t .
ConcurrentNavigableMap<K,V> – kiterjeszti a NavigableMap felületet , és egy ConcurrentNavigableMap-et ad vissza . Minden iterátor használata biztonságos, és nem dobja ki a ConcurrentModificationException kivételt .
A ConcurrentSkipListMap<K, V> a többszálú TreeMap analógjaAz adatok kulcsok szerint vannak rendezve, és az átlagolt log(N) teljesítmény garantálta includeKey,get,put,removeés más hasonló műveleteknél.
A ConcurrentSkipListSet<E> a Set felület ConcurrentSkipListMap alapúmegvalósítása.