CopyOnWriteArrayList
Åtgärderna lägg till , ställ in , ta bort på en given samling resulterar i att en ny kopia av den interna arrayen skapas. Detta säkerställer att vi inte fångar ConcurrentModificationException .
Kom bara ihåg att när du kopierar en array kopieras endast referenser till objekt, inklusive tillgång till fälten för icke-trådsäkra element. Sådana samlingar används bäst i fall med ett minsta antal skrivoperationer.
CopyOnWriteArrayList<E> är en trådsäker analog till ArrayList , implementerad på basis av CopyOnWrite-algoritmer. Ytterligare metoder och konstruktör beskrivs nedan:
CopyOnWriteArrayList(E[] toCopyIn) | En konstruktor som tar en array som indata. |
int indexOf(E e, int index) | Returnerar indexet för det första elementet som hittades, med början vid det givna indexet. |
int lastIndexOf(E e, int index) | Returnerar indexet för det första elementet som hittades i en omvänd sökning, med början vid det givna indexet. |
boolesk addIfAbsent(E e) | Lägg till ett element om det inte finns i samlingen. Likametoden används för att jämföra element . |
int addAllAbsent(Samling<? sträcker sig E> c) | Lägg till element om de inte finns i samlingen. Returnerar antalet tillagda element. |
ConcurrentMap-gränssnitt
Förbättrade implementeringar av HashMap och TreeMap med stöd för multithreading och skalbarhet.
ConcurrentMap<K, V> är ett gränssnitt som utökar Map med ytterligare atomoperationer.
V putIfAbsent(K-nyckel, V-värde) | Lägger till ett nytt nyckel-värdepar endast om nyckeln inte finns i samlingen. Returnerar föregående värde för den givna nyckeln. |
boolean remove(Objektnyckel, Objektvärde) | Tar endast bort nyckel-värdeparet om den givna nyckeln matchar det angivna värdet i kartan. Returnerar sant om elementet har tagits bort. |
boolean replace(K-nyckel, V oldValue, V newValue) | Ersätter det gamla värdet med det nya med nyckel endast om det gamla värdet matchar det angivna värdet i kartan. Returnerar sant om värdet har ersatts med ett nytt. |
V ersätt (K-nyckel, V-värde) | Ersätter ett gammalt värde med ett nytt med nyckel endast om nyckeln är associerad med något värde. Returnerar föregående värde för den givna nyckeln. |
ConcurrentHashMap<K, V> - här presenteras data i form av segment, som är uppdelade i nyckelhash. Som ett resultat, om du behöver åtkomst, är segmentet låst, inte objektet. Iteratorer kastar inte ConcurrentModificationException och representerar data för en viss tidsperiod.
Implementeringar av ConcurrentHashMap
ConcurrentHashMap<K, V> - här presenteras data i form av segment, uppdelade efter nyckelhaschar. Som ett resultat låses dataåtkomst av segment, inte av ett objekt. Dessutom representerar iteratorer data för en specifik tidsperiod och kastar inte ConcurrentModificationException .
ConcurrentNavigableMap<K,V> - utökar NavigableMap- gränssnittet och returnerar en ConcurrentNavigableMap . Alla iteratorer är säkra att använda och kastar inte ConcurrentModificationException .
ConcurrentSkipListMap<K, V> är en analog till TreeMap för multithreading. Data sorteras efter nyckel och genomsnittlig log(N) prestanda garanteras förcontainsKey,get,put,removeoch andra liknande operationer.
ConcurrentSkipListSet<E> är en implementering av Set- gränssnittet baserat på ConcurrentSkipListMap .