CopyOnWriteArrayList
Le operazioni add , set , remove su una data raccolta comportano la creazione di una nuova copia dell'array interno. Ciò garantisce che non rileviamo ConcurrentModificationException .
Ricorda solo che quando si copia un array, vengono copiati solo i riferimenti agli oggetti, incluso l'accesso ai campi degli elementi non thread-safe. Tali raccolte sono utilizzate al meglio nei casi con un numero minimo di operazioni di scrittura.
CopyOnWriteArrayList<E> è un analogo thread-safe di ArrayList , implementato sulla base degli algoritmi CopyOnWrite. Ulteriori metodi e costruttore sono descritti di seguito:
CopyOnWriteArrayList(E[] toCopyIn) | Un costruttore che accetta un array come input. |
int indexOf(E e, int indice) | Restituisce l'indice del primo elemento trovato, a partire dall'indice specificato. |
int lastIndexOf(E e, int indice) | Restituisce l'indice del primo elemento trovato in una ricerca inversa, partendo dall'indice dato. |
booleano addIfAbsent(E e) | Aggiungi un elemento se non è nella raccolta. Il metodo equals viene utilizzato per confrontare gli elementi . |
int addAllAbsent(Collection<? extends E> c) | Aggiungi elementi se non sono nella raccolta. Restituisce il numero di elementi aggiunti. |
Interfaccia ConcurrentMap
Implementazioni migliorate di HashMap e TreeMap con supporto per multithreading e scalabilità.
ConcurrentMap<K, V> è un'interfaccia che estende Map con operazioni atomiche aggiuntive.
V putIfAbsent(chiave K, valore V) | Aggiunge una nuova coppia chiave-valore solo se la chiave non è nella raccolta. Restituisce il valore precedente per la chiave data. |
boolean remove(Chiave oggetto, Valore oggetto) | Rimuove la coppia chiave-valore solo se la chiave specificata corrisponde al valore specificato nella mappa. Restituisce true se l'elemento è stato rimosso correttamente. |
sostituzione booleana (tasto K, V vecchioValore, V nuovoValore) | Sostituisce il vecchio valore con quello nuovo per chiave solo se il vecchio valore corrisponde al valore specificato nella mappa. Restituisce true se il valore è stato sostituito con uno nuovo. |
Sostituzione V (tasto K, valore V) | Sostituisce un vecchio valore con uno nuovo per chiave solo se la chiave è associata a qualsiasi valore. Restituisce il valore precedente per la chiave data. |
ConcurrentHashMap<K, V> - qui i dati sono presentati sotto forma di segmenti, che sono divisi in hash chiave. Di conseguenza, se è necessario l'accesso, il segmento è bloccato, non l'oggetto. Gli iteratori non generano ConcurrentModificationException e rappresentano i dati per un periodo di tempo specifico.
Implementazioni di ConcurrentHashMap
ConcurrentHashMap<K, V> - qui i dati sono presentati sotto forma di segmenti, suddivisi per hash chiave. Di conseguenza, l'accesso ai dati è bloccato da segmenti, non da un oggetto. Inoltre, gli iteratori rappresentano i dati per un intervallo di tempo specifico e non generano ConcurrentModificationException .
ConcurrentNavigableMap<K,V> - estende l'interfaccia NavigableMap e restituisce un ConcurrentNavigableMap . Tutti gli iteratori sono sicuri da usare e non generano ConcurrentModificationException .
ConcurrentSkipListMap<K, V> è un analogo di TreeMap per il multithreading. I dati sono ordinati per chiave e le prestazioni medie di log(N) sono garantite percontainsKey,get,put,removee altre operazioni simili.
ConcurrentSkipListSet<E> è un'implementazione dell'interfaccia Set basata su ConcurrentSkipListMap .
GO TO FULL VERSION