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