一、概念
类定义:
public class CopyOnWriteArraySet<E> extends AbstractSet<E>
implements java.io.Serializable
- 继承了AbstractSet类,实现了Set接口,拥有一组Set通用的操作。
- 实现了Serializable接口,可进行序列化。
特点:
- 允许空元素。
- 无重复元素。
- 线程安全。
二、使用
//TestCopyOnWriteArraySet
public class TestCopyOnWriteArraySet {
private static final String TAG = "CopyOnWriteArraySet";
private CopyOnWriteArraySet<String> 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<String> 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<E> al;
构造函数
//无参构造函数,创建CopyOnWriteArrayList对象用于实际操作数据
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList<E>();
}
//指定Collection对象作为参数的构造函数,创建CopyOnWriteArrayList对象并插入Collection中的非重复元素
public CopyOnWriteArraySet(Collection<? extends E> c) {
if (c.getClass() == CopyOnWriteArraySet.class) {
@SuppressWarnings("unchecked") CopyOnWriteArraySet<E> cc =
(CopyOnWriteArraySet<E>)c;
al = new CopyOnWriteArrayList<E>(cc.al);
}
else {
al = new CopyOnWriteArrayList<E>();
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<E> iterator()
//获取迭代器对象
public Iterator<E> iterator() {
return al.iterator(); //调用CopyOnWriteArrayList的iterator方法
}
public int size()
//获取元素个数
public int size() {
return al.size(); //调用CopyOnWriteArrayList的size方法
}
网友评论