java.util.concurrent.CopyOnWriteArraySet

来源:互联网 发布:万象网管软件 编辑:程序博客网 时间:2024/05/16 17:57

 

CopyOnWriteArraySet

CopyOnWriteArraySet是基于CopyOnWriteArrayList的,如果你看他的contain()和remove方法就知道了。可以知道set是不容许重复数据的,因此add操作和CopyOnWriteArrayList有所区别,他是调用CopyOnWriteArrayList的addIfAbsent方法。

public boolean addIfAbsent(E e) {final ReentrantLock lock = this.lock;lock.lock();try {// Copy while checking if already present.// This wins in the most common case where it is not presentObject[] elements = getArray();int len = elements.length;Object[] newElements = new Object[len + 1];for (int i = 0; i < len; ++i) {if (eq(e, elements[i])) //如果存在,直接返回!return false; // exit, throwing away copyelsenewElements[i] = elements[i];}newElements[len] = e;setArray(newElements);return true;} finally {lock.unlock();}}

由此可见,addIfAbsent需要每次都遍历,在add方面,CopyOnWriteArraySet效率要比CopyOnWriteArrayList低一点。

 

原创粉丝点击