CopyOnWriteArrayList

Operacje add , set , remove na danej kolekcji skutkują utworzeniem nowej kopii wewnętrznej tablicy. Gwarantuje to, że nie złapiemy wyjątku ConcurrentModificationException .

Pamiętaj tylko, że podczas kopiowania tablicy kopiowane są tylko odwołania do obiektów, w tym dostęp do pól elementów nieobsługujących wątków. Takie kolekcje są najlepiej używane w przypadkach z minimalną liczbą operacji zapisu.

CopyOnWriteArrayList<E> jest wątkowo bezpiecznym analogiem ArrayList , zaimplementowanym w oparciu o algorytmy CopyOnWrite. Dodatkowe metody i konstruktor opisano poniżej:

CopyOnWriteArrayList(E[] toCopyIn) Konstruktor, który przyjmuje tablicę jako dane wejściowe.
int indeksOf(E e, int indeks) Zwraca indeks pierwszego znalezionego elementu, zaczynając od podanego indeksu.
int lastIndexOf(E e, int indeks) Zwraca indeks pierwszego elementu znalezionego w wyszukiwaniu wstecznym, zaczynając od podanego indeksu.
boolean addIfAbsent(E e) Dodaj element, jeśli nie ma go w kolekcji. Metoda equals służy do porównywania elementów .
int addAllAbsent(Kolekcja <? rozszerza E> c) Dodaj elementy, jeśli nie ma ich w kolekcji. Zwraca liczbę dodanych elementów.

Interfejs ConcurrentMap

Ulepszone implementacje HashMap i TreeMap z obsługą wielowątkowości i skalowalności.

ConcurrentMap<K, V> to interfejs rozszerzający Map o dodatkowe operacje atomowe.

V putIfAbsent(klawisz K, wartość V) Dodaje nową parę klucz-wartość tylko wtedy, gdy klucz nie znajduje się w kolekcji. Zwraca poprzednią wartość dla podanego klucza.
boolean remove (klucz obiektu, wartość obiektu) Usuwa parę klucz-wartość tylko wtedy, gdy dany klucz pasuje do podanej wartości w Mapie. Zwraca true, jeśli element został pomyślnie usunięty.
boolowska zamiana (klawisz K, V staraWartość, V nowaWartość) Zastępuje starą wartość nową według klucza tylko wtedy, gdy stara wartość pasuje do podanej wartości na mapie. Zwraca true, jeśli wartość została zastąpiona nową.
Zastąp V (klawisz K, wartość V) Zastępuje starą wartość nową według klucza tylko wtedy, gdy klucz jest powiązany z jakąkolwiek wartością. Zwraca poprzednią wartość dla podanego klucza.

ConcurrentHashMap<K,V> - tutaj dane prezentowane są w postaci segmentów, które podzielone są na kluczowe skróty. W rezultacie, jeśli potrzebujesz dostępu, segment jest zablokowany, a nie obiekt. Iteratory nie rzucają wyjątku ConcurrentModificationException i reprezentują dane z określonego okresu czasu.

Implementacje ConcurrentHashMap

ConcurrentHashMap<K,V> - tutaj dane prezentowane są w postaci segmentów, z podziałem na kluczowe skróty. W rezultacie dostęp do danych jest blokowany przez segmenty, a nie przez jeden obiekt. Ponadto iteratory reprezentują dane dla określonego wycinka czasu i nie zgłaszają wyjątku ConcurrentModificationException .

ConcurrentNavigableMap<K,V> — rozszerza interfejs NavigableMap i zwraca ConcurrentNavigableMap . Wszystkie iteratory są bezpieczne w użyciu i nie zgłaszają wyjątku ConcurrentModificationException .

ConcurrentSkipListMap<K, V> jest analogiem TreeMap do wielowątkowości. Dane są sortowane według klucza, a uśredniona wydajność log(N) jest gwarantowana w przypadku operacjizawieraKey,get,put,removei innych podobnych operacji.

ConcurrentSkipListSet<E> to implementacja interfejsu Set opartego na ConcurrentSkipListMap .