JDKソース--CopyOnWriteArraySet
3679 ワード
一、概念
クラス定義: AbstractSetクラスを継承し、Setインタフェースを実現し、Set共通の操作のセットを持つ. はSerializableインタフェースを実現し、シーケンス化することができる. 特徴:は空の要素を許可します. 重複要素はありません. スレッドは安全です. 二、使用
重要なパラメータ
CopyOnWriteArrayList
クラス定義:
public class CopyOnWriteArraySet extends AbstractSet
implements java.io.Serializable
//TestCopyOnWriteArraySet
public class TestCopyOnWriteArraySet {
private static final String TAG = "CopyOnWriteArraySet";
private CopyOnWriteArraySet set = new CopyOnWriteArraySet();
public void testAdd() {
set.add(null);
set.add("AAA");
set.add("BBB");
set.add("CCC");
set.add("CCC");
Log.d(TAG, "zwm, add set: " + set);
}
public void testRemove() {
set.remove("AAA");
Log.d(TAG, "zwm, remove set: " + set);
}
public void testContains() {
Log.d(TAG, "zwm, contains BBB: " + set.contains("BBB"));
}
public void testIterator() {
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Log.d(TAG, "zwm, iterator item: " + iterator.next());
}
}
public void testSize() {
Log.d(TAG, "zwm, size: " + set.size());
}
}
//
private void testMethod() {
Log.d(TAG, "zwm, testMethod");
TestCopyOnWriteArraySet testCopyOnWriteArraySet = new TestCopyOnWriteArraySet();
testCopyOnWriteArraySet.testAdd();
testCopyOnWriteArraySet.testContains();
testCopyOnWriteArraySet.testRemove();
testCopyOnWriteArraySet.testSize();
testCopyOnWriteArraySet.testIterator();
}
// log
2019-08-17 14:31:41.940 zwm, testMethod
2019-08-17 14:31:41.941 zwm, add set: [null, AAA, BBB, CCC]
2019-08-17 14:31:41.941 zwm, contains BBB: true
2019-08-17 14:31:41.942 zwm, remove set: [null, BBB, CCC]
2019-08-17 14:31:41.942 zwm, size: 3
2019-08-17 14:31:41.942 zwm, iterator item: null
2019-08-17 14:31:41.942 zwm, iterator item: BBB
2019-08-17 14:31:41.942 zwm, iterator item: CCC
三、原理重要なパラメータ
// CopyOnWriteArrayList
private final CopyOnWriteArrayList al;
コンストラクタ// , CopyOnWriteArrayList
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList();
}
// Collection , CopyOnWriteArrayList Collection
public CopyOnWriteArraySet(Collection extends E> c) {
if (c.getClass() == CopyOnWriteArraySet.class) {
@SuppressWarnings("unchecked") CopyOnWriteArraySet cc =
(CopyOnWriteArraySet)c;
al = new CopyOnWriteArrayList(cc.al);
}
else {
al = new CopyOnWriteArrayList();
al.addAllAbsent(c);
}
}
public boolean add(E e)//
public boolean add(E e) {
return al.addIfAbsent(e); // CopyOnWriteArrayList addIfAbsent
}
public boolean remove(Object o)// o
public boolean remove(Object o) {
return al.remove(o); // CopyOnWriteArrayList remove
}
public boolean contains(Object o)// o
public boolean contains(Object o) {
return al.contains(o); // CopyOnWriteArrayList contains
}
public Iterator iterator()//
public Iterator iterator() {
return al.iterator(); // CopyOnWriteArrayList iterator
}
public int size()//
public int size() {
return al.size(); // CopyOnWriteArrayList size
}
四、テーマCopyOnWriteArrayList