CopyOnWriteArrayList
對給定集合的add、set、remove操作會導致創建內部數組的新副本。這確保我們不會捕獲ConcurrentModificationException。
請記住,在復制數組時,只會復制對對象的引用,包括對非線程安全元素字段的訪問。此類集合最適用於寫入操作最少的情況。

CopyOnWriteArrayList<E>是ArrayList 的線程安全模擬,基於 CopyOnWrite 算法實現。其他方法和構造函數如下所述:
CopyOnWriteArrayList(E[] toCopyIn) | 將數組作為輸入的構造函數。 |
int indexOf(E e, int index) | 返回找到的第一個元素的索引,從給定索引開始。 |
int lastIndexOf(E e, int 索引) | 返回在反向搜索中找到的第一個元素的索引,從給定索引開始。 |
布爾 addIfAbsent(E e) | 如果元素不在集合中,則添加一個元素。equals方法用於比較元素。 |
int addAllAbsent(Collection<? extends E> c) | 如果元素不在集合中,則添加元素。返回添加的元素數。 |
ConcurrentMap 接口
改進了HashMap和TreeMap的實現,支持多線程和可擴展性。

ConcurrentMap<K, V>是一個通過附加原子操作擴展Map 的接口。
V putIfAbsent(K 鍵, V 值) | 僅當鍵不在集合中時才添加新的鍵值對。返回給定鍵的先前值。 |
布爾刪除(對象鍵,對象值) | 僅當給定鍵與 Map 中的給定值匹配時才刪除鍵值對。如果元素已成功刪除,則返回 true。 |
布爾替換(K 鍵,V 舊值,V 新值) | 僅當舊值與 Map 中的給定值匹配時,才通過鍵將舊值替換為新值。如果該值已被新值替換,則返回 true。 |
V 替換(K 鍵,V 值) | 僅當鍵與任何值相關聯時,才通過鍵將舊值替換為新值。返回給定鍵的先前值。 |
ConcurrentHashMap<K, V> - 此處數據以分段的形式呈現,分段分為鍵哈希。結果,如果您需要訪問,則段被鎖定,而不是對象。迭代器不會拋出ConcurrentModificationException並表示特定時間段內的數據。
ConcurrentHashMap 的實現
ConcurrentHashMap<K, V> - 此處數據以段的形式呈現,按鍵哈希分解。結果,數據訪問被段鎖定,而不是被一個對象鎖定。此外,迭代器表示特定時間片的數據並且不會拋出ConcurrentModificationException。
ConcurrentNavigableMap<K,V> - 擴展NavigableMap接口並返回一個 ConcurrentNavigableMap。所有迭代器都可以安全使用,不會拋出ConcurrentModificationException。
ConcurrentSkipListMap<K, V>是用於多線程的TreeMap 的模擬。數據按鍵排序,並保證containsKey、get、put、remove和其他類似操作的平均 log(N) 性能。
ConcurrentSkipListSet<E>是基於ConcurrentSkipListMap的Set接口的實現。
GO TO FULL VERSION