CopyOnWriteArraySetソースコード分析


    CopyOnWriteArrayList     CopyOnWriteArraySet。CopyOnWriteArraySet CopyOnWriteArrayList                 ,Set                       (get(int index),add(int index,E e),set(int index,E e),remove(int index))。

CopyOnArraySetクラスの構造は以下の通りである:public class CopyOnWriteArraySet extends AbstractSet implements java.io.Serializable;AbstraactSetはsetインタフェースの中堅実装であり、このインタフェースを実装するために必要な作業を最小限に抑えることができます.1、CopyOnWriteArraySetについて、・構造方法:CopyOnWriteArraySet();要素の追加:add(E)メソッド;・オブジェクトの削除:remove(E)メソッド;・すべてのオブジェクト、すなわちiterator()を巡回し、実際には拡張型のforループで巡回するのが一般的です.以上の操作の下部はすべてCopyOnWriteArrayListに対して操作して、CopyOnWriteArrayListを分析したことがあって、これらの方法は比較的に簡単です.2、構造方法:/**
  • 空のset*/public CopyOnWriteArraySet(){al=new CopyOnWriteArrayList();//CopyOnWriteArrayListに対する操作への下位変換}
  • /**
  • Creates a set containing all of the elements of the specified
  • collection. 指定した要素を使用してset
  • を作成する
  • @param c the collection of elements to initially contain
  • @throws NullPointerException if the specified collection is null*/public CopyOnWriteArraySet(Collection extends E>c){al=new CopyOnWriteArrayList();al.addAblesent(c);//要素が存在しない場合に追加}3、追加要素
  • @param e element to be added to this set
  • @return true if this set did not already contain the specified
  • element*/public boolean add(E e){return al.addIfAbsent(e);//要素が存在しない場合に}/**を追加
  • Append the element if not present.要素が存在しない場合、追加要素
  • @param e element to be added to this list, if absent
  • @return true if the element was added*/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

  • 4、要素public boolean remove(Object o){return al.remove(o);//CopyOnWriteArrayListのremove(Object o)メソッドを呼び出す}
    5、すべての要素public Iterator iterator(){return al.iterator();//CopyOnWriteArrayListのiteratorメソッドを呼び出す}
    CopyOnWriteArraySetの下部にあるCopyOnWriteArrayListCopyOnWriteArraySetは、add要素のときに配列を1回遍歴することで重複要素を追加しない役割を果たすが、配列を遍歴するためにCopyOnWriteArrayListのaddSetセットがインデックスによって直接取得または修正または削除されていない方法(get(int index)、add(int index,E e)よりも効率が低く、set(int index,E e),remove(int index)).