前言
CopyOnWriteArraySet是通過代理CopyOnWriteArrayList的方法來實現(xiàn)的檬姥,add操作是通過調(diào)用CopyOnWriteArrayList的addxxx方法來實現(xiàn)set集合不重復(fù)元素特性的。
定義
構(gòu)造器
默認(rèn)構(gòu)造器
集合構(gòu)造器
add方法如何保證set集合的特性
add方法調(diào)用CopyOnWriteArrayList的addIfAbsent方法實現(xiàn)set.add
CopyOnWriteArrayList中的addIfAbsent方法:集合中沒有指定元素則添加
私有方法
需要注意indexOf方法是通過equal方法比較是否存在的棠隐。
在addIfAbsent方法中,我們發(fā)現(xiàn)對addIfAbsent方法的優(yōu)化南片,即利用array數(shù)組的線程可見性变姨,無鎖獲取一個快照,如果在這個快照中有指定元素則返回false丽惭,如果不含有指定元素,需要調(diào)用addIfAbsent(E e, Object[] snapshot)方法加鎖進(jìn)行遍歷并將e添加在新創(chuàng)建的數(shù)組尾部辈双。即避免了在含有重復(fù)元素的情況下加鎖遍歷的過程责掏。
方法列表
總結(jié)
CopyOnWriteArraySet和CopyOnWriteArrayList性能特性一樣,只是CopyOnWriteArraySet的元素不允許重復(fù)湃望。