CopyOnWriteArrayList
Belirli bir koleksiyondaki ekleme , ayarlama , kaldırma işlemleri , dahili dizinin yeni bir kopyasının oluşturulmasıyla sonuçlanır. Bu, ConcurrentModificationException öğesini yakalamamamızı sağlar .
Bir diziyi kopyalarken, iş parçacığı açısından güvenli olmayan öğelerin alanlarına erişim de dahil olmak üzere yalnızca nesnelere yapılan başvuruların kopyalandığını unutmayın. Bu tür koleksiyonlar en az sayıda yazma işlemi olan durumlarda kullanılır.
![](https://cdn.codegym.cc/images/article/dd30e3f5-509c-479f-acb2-47f72f63b032/512.jpeg)
CopyOnWriteArrayList<E> , CopyOnWrite algoritmaları temelinde uygulanan ArrayList'in iş parçacığı açısından güvenli bir analoğudurEk yöntemler ve yapıcı aşağıda açıklanmıştır:
CopyOnWriteArrayList(E[] toCopyIn) | Bir diziyi girdi olarak alan bir oluşturucu. |
int indeksOf(E e, int indeks) | Verilen dizinden başlayarak bulunan ilk öğenin dizinini döndürür. |
int lastIndexOf(E e, int dizin) | Verilen dizinden başlayarak geriye doğru aramada bulunan ilk öğenin dizinini döndürür. |
boole addIfAbsent(E e) | Koleksiyonda yoksa bir öğe ekleyin. Eşittir yöntemi, öğeleri karşılaştırmak için kullanılır . |
int addAllAbsent(Koleksiyon<? E> c'yi genişletir) | Koleksiyonda yoksa öğeler ekleyin. Eklenen öğe sayısını döndürür. |
ConcurrentMap arayüzü
Çoklu iş parçacığı ve ölçeklenebilirlik desteğiyle HashMap ve TreeMap'in iyileştirilmiş uygulamaları .
![](https://cdn.codegym.cc/images/article/b93ad73c-488f-4c46-91c8-9a76c7337e1a/1024.jpeg)
ConcurrentMap<K, V>, Haritayı ek atomik işlemlerlegenişleten bir arabirimdir
V putIfAbsent(K tuşu, V değeri) | Yalnızca anahtar koleksiyonda değilse yeni bir anahtar/değer çifti ekler. Verilen anahtar için önceki değeri döndürür. |
boolean remove(Nesne anahtarı, Nesne değeri) | Anahtar/değer çiftini yalnızca verilen anahtar, Haritadaki verilen değerle eşleşirse kaldırır. Öğe başarıyla kaldırıldıysa true değerini döndürür. |
boole değiştirme(K tuşu, V eskiDeğeri, V yeniDeğeri) | Yalnızca eski değer Haritada verilen değerle eşleşiyorsa, eski değeri yenisiyle değiştirir. Değer yenisiyle değiştirilmişse true değerini döndürür. |
V değiştir(K tuşu, V değeri) | Yalnızca anahtar herhangi bir değerle ilişkilendirilmişse, eski bir değeri anahtarla yenisiyle değiştirir. Verilen anahtar için önceki değeri döndürür. |
ConcurrentHashMap<K, V> - burada veriler, anahtar karmalara bölünmüş bölümler şeklinde sunulur. Sonuç olarak, erişime ihtiyacınız varsa nesne değil segment kilitlenir. Yineleyiciler, ConcurrentModificationException oluşturmazve belirli bir süre için verileri temsil eder.
ConcurrentHashMap Uygulamaları
ConcurrentHashMap<K, V> - burada veriler, anahtar karmalara göre bölünmüş, segmentler şeklinde sunulur. Sonuç olarak, veri erişimi tek bir nesne tarafından değil, segmentler tarafından kilitlenir. Ek olarak, yineleyiciler belirli bir zaman dilimi için verileri temsil eder ve ConcurrentModificationException atmaz.
ConcurrentNavigableMap<K,V> - NavigableMap arayüzünü genişletir ve bir ConcurrentNavigableMap döndürür . Tüm yineleyicilerin kullanımı güvenlidir ve ConcurrentModificationException atmaz.
ConcurrentSkipListMap<K, V>, çoklu kullanım için bir TreeMap analogudur. Veriler anahtara göre sıralanır veincludeKey,get,put,removeve diğer benzer işlemler için ortalama log(N) performansı garanti edilir.
ConcurrentSkipListSet<E>, Set arabiriminin ConcurrentSkipListMap tabanlıbir uygulamasıdır.