【注意】最后更新于 July 18, 2017,文中内容可能已过时,请谨慎使用。
09.CopyOnWriteArraySet源码分析
简介
- CopyOnWriteArraySet由内部的一个CopyOnWriteArrayList来代理实现Set集合操作。
一、CopyOnWriteArraySet内部实现原理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class CopyOnWriteArraySet<E> extends AbstractSet<E>
implements java.io.Serializable {
private static final long serialVersionUID = 5457747651344034263L;
private final CopyOnWriteArrayList<E> al;
/**
* Creates an empty set.
*/
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList<E>();
}
/**
* Creates a set containing all of the elements of the specified
* collection.
*
* @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<E>();
al.addAllAbsent(c);
}
}
|
二、add 添加元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/**
* Adds the specified element to this set if it is not already present.
* More formally, adds the specified element <tt>e</tt> to this set if
* the set contains no element <tt>e2</tt> such that
* <tt>(e==null ? e2==null : e.equals(e2))</tt>.
* If this set already contains the element, the call leaves the set
* unchanged and returns <tt>false</tt>.
*
* @param e element to be added to this set
* @return <tt>true</tt> if this set did not already contain the specified
* element
*/
public boolean add(E e) {
return al.addIfAbsent(e);
}
|
三、删除元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* Removes the specified element from this set if it is present.
* More formally, removes an element <tt>e</tt> such that
* <tt>(o==null ? e==null : o.equals(e))</tt>,
* if this set contains such an element. Returns <tt>true</tt> if
* this set contained the element (or equivalently, if this set
* changed as a result of the call). (This set will not contain the
* element once the call returns.)
*
* @param o object to be removed from this set, if present
* @return <tt>true</tt> if this set contained the specified element
*/
public boolean remove(Object o) {
return al.remove(o);
}
|
六、Iterator 迭代器实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* Returns an iterator over the elements contained in this set
* in the order in which these elements were added.
*
* <p>The returned iterator provides a snapshot of the state of the set
* when the iterator was constructed. No synchronization is needed while
* traversing the iterator. The iterator does <em>NOT</em> support the
* <tt>remove</tt> method.
*
* @return an iterator over the elements in this set
*/
public Iterator<E> iterator() {
return al.iterator();
}
|
所有操作都是调用CopyOnWriteArrayList