JUC-Set
2020-02-25 本文已影响0人
GIT提交不上
HashSet构造函数:默认容量为16的HashMap。(底层是HashMap)
/**
* Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
* default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
map = new HashMap<>();
}
HashSet的add方法:只关心键值,value为常量。
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
CopyOnWriteArraySet解决Set线程不安全性问题,代码如下:
/**
* @author luffy
**/
public class HashSetDemo {
public static void main(String[] args){
Set<String> set = new CopyOnWriteArraySet<>();
//Set<String> set = Collections.synchronizedSet(new HashSet<>());
for(int i =0 ;i< 30;i++){
new Thread(()->{
set.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(set);
},String.valueOf(i)).start();
}
}
}
CopyOnWriteArraySet的构造方法,底层也是CopyOnWriteArrayList。
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList<E>();
}