CopyOnWriteArrayList

De bewerkingen add , set , remove op een bepaalde verzameling resulteren in een nieuwe kopie van de interne array die wordt gemaakt. Dit zorgt ervoor dat we ConcurrentModificationException niet opvangen .

Onthoud dat bij het kopiëren van een array alleen verwijzingen naar objecten worden gekopieerd, inclusief toegang tot de velden van niet-thread-safe elementen. Dergelijke verzamelingen kunnen het beste worden gebruikt in gevallen met een minimaal aantal schrijfbewerkingen.

CopyOnWriteArrayList<E> is een thread-safe analoog van ArrayList , geïmplementeerd op basis van CopyOnWrite-algoritmen. Aanvullende methoden en constructor worden hieronder beschreven:

CopyOnWriteArrayList(E[] toCopyIn) Een constructor die een array als invoer gebruikt.
int indexOf(E e, int index) Retourneert de index van het eerste gevonden element, beginnend bij de gegeven index.
int lastIndexOf(E e, int index) Retourneert de index van het eerste gevonden element in een omgekeerde zoekopdracht, beginnend bij de gegeven index.
boolean addIfAbsent(E e) Voeg een element toe als het niet in de collectie zit. De equals methode wordt gebruikt om elementen te vergelijken .
int addAllAbsent(Verzameling<? verlengt E> c) Voeg elementen toe als ze niet in de collectie zitten. Retourneert het aantal toegevoegde elementen.

ConcurrentMap-interface

Verbeterde implementaties van HashMap en TreeMap met ondersteuning voor multithreading en schaalbaarheid.

ConcurrentMap<K, V> is een interface die Map uitbreidt met extra atomaire bewerkingen.

V putIfAbsent(K-toets, V-waarde) Voegt alleen een nieuw sleutel-waardepaar toe als de sleutel niet in de verzameling staat. Retourneert de vorige waarde voor de opgegeven sleutel.
boolean remove (Objectsleutel, Objectwaarde) Verwijdert het sleutel-waardepaar alleen als de opgegeven sleutel overeenkomt met de opgegeven waarde in de kaart. Retourneert true als het element met succes is verwijderd.
booleaanse vervanging (K-sleutel, V oudeWaarde, V nieuweWaarde) Vervangt de oude waarde alleen met de nieuwe door de sleutel als de oude waarde overeenkomt met de gegeven waarde in de kaart. Retourneert waar als de waarde is vervangen door een nieuwe.
V vervangen (K-toets, V-waarde) Vervangt een oude waarde alleen door een nieuwe door een sleutel als de sleutel aan een willekeurige waarde is gekoppeld. Retourneert de vorige waarde voor de opgegeven sleutel.

ConcurrentHashMap<K, V> - hier worden de gegevens gepresenteerd in de vorm van segmenten, die zijn onderverdeeld in belangrijke hashs. Als u dus toegang nodig heeft, is het segment vergrendeld, niet het object. Iterators genereren geen ConcurrentModificationException en vertegenwoordigen gegevens voor een bepaalde periode.

Implementaties van ConcurrentHashMap

ConcurrentHashMap<K, V> - hier worden de gegevens gepresenteerd in de vorm van segmenten, uitgesplitst naar belangrijke hashs. Als gevolg hiervan wordt de gegevenstoegang vergrendeld door segmenten, niet door één object. Bovendien vertegenwoordigen iterators gegevens voor een bepaald tijdsbestek en genereren ze geen ConcurrentModificationException .

ConcurrentNavigableMap<K,V> - breidt de NavigableMap- interface uit en retourneert een ConcurrentNavigableMap . Alle iterators zijn veilig in gebruik en genereren geen ConcurrentModificationException .

ConcurrentSkipListMap<K, V> is een analoog van TreeMap voor multithreading. De gegevens worden gesorteerd op sleutel en de gemiddelde log(N)-prestaties zijn gegarandeerd voorcomesKey,get,put,removeen andere vergelijkbare bewerkingen.

ConcurrentSkipListSet<E> is een implementatie van de Set- interface op basis van ConcurrentSkipListMap .