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 .
GO TO FULL VERSION