JavaTM 2 Platform
Standard Ed. 6

java.util.concurrent
類別 CopyOnWriteArraySet<E>

java.lang.Object
  繼承者 java.util.AbstractCollection<E>
      繼承者 java.util.AbstractSet<E>
          繼承者 java.util.concurrent.CopyOnWriteArraySet<E>
型別參數:
E - 此 collection 中所保存元素的型別
所有已實作的介面:
Serializable, Iterable<E>, Collection<E>, Set<E>

public class CopyOnWriteArraySet<E>
extends AbstractSet<E>
implements Serializable

對其所有操作使用內部 CopyOnWriteArrayListSet。因此,它共享以下相同的基本屬性:

範例用法。 以下程式碼使用一個寫時複製(copy-on-write)的 set,以維護在狀態更新時執行某項操作的一組 Handler 物件。

 class Handler { void handle(); ... }

 class X {
    private final CopyOnWriteArraySet<Handler> handlers = new CopyOnWriteArraySet<Handler>();
    public void addHandler(Handler h) { handlers.add(h); }

    private long internalState;
    private synchronized void changeState() { internalState = ...; }

    public void update() {
       changeState();
       for (Handler handler : handlers)
           handler.handle();
    }
 }
 

此類別是 Java Collections Framework 的成員。

從以下版本開始:
1.5
另請參見:
CopyOnWriteArrayList, 序列化表格

建構子摘要
CopyOnWriteArraySet()
          創建一個空 set。
CopyOnWriteArraySet(Collection<? extends E> c)
          創建一個套件含指定 collection 所有元素的 set。
 
方法摘要
 boolean add(E e)
          如果指定元素並不存在於此 set 中,則添加它。
 boolean addAll(Collection<? extends E> c)
          如果此 set 中沒有指定 collection 中的所有元素,則將它們都添加到此 set 中。
 void clear()
          移除此 set 中的所有元素。
 boolean contains(Object o)
          如果此 set 套件含指定元素,則返回 true
 boolean containsAll(Collection<?> c)
          如果此 set 套件含指定 collection 的所有元素,則返回 true
 boolean equals(Object o)
          比較指定對象與此 set 的相等性。
 boolean isEmpty()
          如果此 set 不包含任何元素,則返回 true
 Iterator<E> iterator()
          返回按照元素添加順序在此 set 中包含的元素上進行迭代的迭代器。
 boolean remove(Object o)
          如果指定元素存在於此 set 中,則將其移除。
 boolean removeAll(Collection<?> c)
          移除此 set 中包含在指定 collection 中的所有元素。
 boolean retainAll(Collection<?> c)
          僅保留此 set 中那些包含在指定 collection 中的元素。
 int size()
          返回此 set 中的元素數目。
 Object[] toArray()
          返回一個套件含此 set 所有元素的陣列。
<T> T[]
toArray(T[] a)
          返回一個套件含此 set 所有元素的陣列;返回陣列的運行時型別是指定陣列的型別。
 
從類別 java.util.AbstractSet 繼承的方法
hashCode
 
從類別 java.util.AbstractCollection 繼承的方法
toString
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

CopyOnWriteArraySet

public CopyOnWriteArraySet()
創建一個空 set。


CopyOnWriteArraySet

public CopyOnWriteArraySet(Collection<? extends E> c)
創建一個套件含指定 collection 所有元素的 set。

參數:
c - 最初包含元素的 collection
拋出:
NullPointerException - 如果指定 collection 為 null
方法詳細資訊

size

public int size()
返回此 set 中的元素數目。

指定者:
介面 Collection<E> 中的 size
指定者:
介面 Set<E> 中的 size
指定者:
類別 AbstractCollection<E> 中的 size
返回:
此 set 中的元素數

isEmpty

public boolean isEmpty()
如果此 set 不包含任何元素,則返回 true

指定者:
介面 Collection<E> 中的 isEmpty
指定者:
介面 Set<E> 中的 isEmpty
覆寫:
類別 AbstractCollection<E> 中的 isEmpty
返回:
如果此 set 不包含任何元素,則返回 true

contains

public boolean contains(Object o)
如果此 set 套件含指定元素,則返回 true。更確切地講,當且僅當此 set 套件含滿足 (o==null ? e==null : o.equals(e)) 的元素 e 時,返回 true

指定者:
介面 Collection<E> 中的 contains
指定者:
介面 Set<E> 中的 contains
覆寫:
類別 AbstractCollection<E> 中的 contains
參數:
o - 將測試其是否存在於此 set 中的元素
返回:
如果此 set 套件含指定元素,則返回 true

toArray

public Object[] toArray()
返回一個套件含此 set 所有元素的陣列。如果此 set 對其迭代器返回的元素的順序做出了某些保證,那麼此方法必須以相同的順序返回這些元素。

不維護對返回陣列的任何參考,因而它將是「安全的」。(換句話說,即使 set 受到陣列的支持,此方法也必須分派一個新的陣列)。因此,調用這可以隨意修改返回的陣列。

此方法充當基於陣列的 API 與基於 collection 的 API 之間的橋樑。

指定者:
介面 Collection<E> 中的 toArray
指定者:
介面 Set<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
返回:
包含此 set 所有元素的陣列

toArray

public <T> T[] toArray(T[] a)
返回一個套件含此 set 所有元素的陣列;返回陣列的運行時型別是指定陣列的型別。如果指定的陣列能容納該 set,則將 set 返回此處。否則,將分派一個具有指定陣列的運行時型別和此 set 大小的新陣列。

如果指定的陣列能容納 set,並有剩餘的空間(即陣列的元素比 set 多),那麼會將接 set 尾部的元素設置為 null。( 當調用者知道此 set 不包含任何 null 元素時,才可使用此方法來確定此 set 的長度。)

如果此 set 對其迭代器返回的元素順序做出了某些保證,那麼此方法必須以相同的順序返回這些元素。

toArray() 方法一樣,此方法充當基於陣列 的 API 與基於 collection 的 API 之間的橋樑。更進一步說,此方法允許對輸出陣列的運行時型別進行精確控制,在某些情況下,可以用來節省分派開銷。

假定 x 是只包含字元串的一個已知 set。以下程式碼用來將該 set 轉儲到一個新分派的 String 陣列:

     String[] y = x.toArray(new String[0]);
注意,toArray(new Object[0])toArray() 在功能上是相同的。

指定者:
介面 Collection<E> 中的 toArray
指定者:
介面 Set<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
參數:
存儲此 - set 元素的陣列(如果該陣列足夠大);否則為此分派一個具有相同運行時型別的新陣列
返回:
包含此 set 所有元素的陣列
拋出:
ArrayStoreException - 如果指定陣列的運行時型別不是此 set 每個元素的運行時型別的父級類別型
NullPointerException - 如果指定陣列為 null

clear

public void clear()
移除此 set 中的所有元素。在此調用返回之後,set 將為空。

指定者:
介面 Collection<E> 中的 clear
指定者:
介面 Set<E> 中的 clear
覆寫:
類別 AbstractCollection<E> 中的 clear

remove

public boolean remove(Object o)
如果指定元素存在於此 set 中,則將其移除。更確切地講,如果此 set 中包含滿足 (o==null ? e==null : o.equals(e)) 的元素 e,則移除它。如果此 set 套件含指定元素(或者此 set 由於調用而發生更改),則返回 true。(調用返回後,則此 set 便不再包含這樣的元素。)

指定者:
介面 Collection<E> 中的 remove
指定者:
介面 Set<E> 中的 remove
覆寫:
類別 AbstractCollection<E> 中的 remove
參數:
o - 要從此 set 移除的物件(如果存在)
返回:
如果此 set 套件含指定元素,則返回 true

add

public boolean add(E e)
如果指定元素並不存在於此 set 中,則添加它。更確切地講,如果此 set 不包含滿足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,則將指定元素 e 添加到此 set 中。如果此 set 已經包含這樣的元素,則該調用不改變此 set 並返回 false

指定者:
介面 Collection<E> 中的 add
指定者:
介面 Set<E> 中的 add
覆寫:
類別 AbstractCollection<E> 中的 add
參數:
e - 要添加到此 set 的元素
返回:
如果此 set 並未包含指定元素,則返回 true

containsAll

public boolean containsAll(Collection<?> c)
如果此 set 套件含指定 collection 的所有元素,則返回 true。如果指定的 collection 也是一個 set,那麼當該 collection 是此 set 的子集 時,此方法返回 true

指定者:
介面 Collection<E> 中的 containsAll
指定者:
介面 Set<E> 中的 containsAll
覆寫:
類別 AbstractCollection<E> 中的 containsAll
參數:
c - 將被檢查是否存在於此 set 的 collection
返回:
如果此 set 套件含指定 collection 的所有元素,則返回 true
拋出:
NullPointerException - 如果指定 collection 為 null
另請參見:
contains(Object)

addAll

public boolean addAll(Collection<? extends E> c)
如果此 set 中沒有指定 collection 中的所有元素,則將它們都添加到此 set 中。如果指定的 collection 也是一個 set,則 addAll 操作會實際修改此 set,從而它的值是兩個 set 的一個並集。如果指定 collection 在操作過程中被修改,則此操作的行為是不確定的。

指定者:
介面 Collection<E> 中的 addAll
指定者:
介面 Set<E> 中的 addAll
覆寫:
類別 AbstractCollection<E> 中的 addAll
參數:
c - 套件含將添加到此 set 中的元素的 collection
返回:
如果此 set 由於調用而發生更改,則返回 true
拋出:
NullPointerException - 如果指定 collection 為 null
另請參見:
add(Object)

removeAll

public boolean removeAll(Collection<?> c)
移除此 set 中包含在指定 collection 中的所有元素。如果指定的 collection 也是一個 set,則此操作會實際修改此 set,從而其值是兩個 set 的一個不對稱差集

指定者:
介面 Collection<E> 中的 removeAll
指定者:
介面 Set<E> 中的 removeAll
覆寫:
類別 AbstractSet<E> 中的 removeAll
參數:
c - 套件含將從此 set 中移除的元素的 collection
返回:
如果此 set 由於調用而發生更改,則返回 true
拋出:
ClassCastException - 如果此 set 的元素的類別與指定 collection 不相容(可選)
NullPointerException - 如果此 set 套件含一個 null 元素並且指定 collection 不允許使用 null 元素(可選),或者指定 collection 為 null
另請參見:
remove(Object)

retainAll

public boolean retainAll(Collection<?> c)
僅保留此 set 中那些包含在指定 collection 中的元素。換句話說,移除此 set 中所有未包含在指定 collection 中的元素。如果指定的 collection 也是一個 set,則此操作會實際修改此 set,這樣其值是兩個 set 的一個交集

指定者:
介面 Collection<E> 中的 retainAll
指定者:
介面 Set<E> 中的 retainAll
覆寫:
類別 AbstractCollection<E> 中的 retainAll
參數:
c - 套件含保留在此 set 中的元素的 collection
返回:
如果此 set 由於調用而發生更改,則返回 true
拋出:
ClassCastException - 如果此 set 的元素的類別與指定 collection 不相容(可選)
NullPointerException - 如果此 set 套件含一個 null 元素並且指定 collection 不允許使用 null 元素(可選),或者指定 collection 為 null
另請參見:
remove(Object)

iterator

public Iterator<E> iterator()
返回按照元素添加順序在此 set 中包含的元素上進行迭代的迭代器。

在建構迭代器時,返回的迭代器提供該 set 的狀態的快照。在遍歷迭代器時無需同步。該迭代器 支持 remove 方法。

指定者:
介面 Iterable<E> 中的 iterator
指定者:
介面 Collection<E> 中的 iterator
指定者:
介面 Set<E> 中的 iterator
指定者:
類別 AbstractCollection<E> 中的 iterator
返回:
在此 set 中的元素上進行迭代的迭代器

equals

public boolean equals(Object o)
比較指定對象與此 set 的相等性。如果指定對象與此物件是同一物件,則返回 true,如果它也是一個 Set 並且在指定 set 上迭代的迭代器所返回的元素序列與在此 set 上進行迭代迭代器所返回的元素的序列相同。更確切地講,如果兩個迭代器返回相同的元素數,並且對於在指定 set 上進行迭代的迭代器返回的每個元素 e1 而言,都有一個由在此 set 上進行迭代的迭代器返回的元素 e2,且該元素滿足 (e1==null ? e2==null : e1.equals(e2)),則認為兩個迭代器將返回相同的元素。

指定者:
介面 Collection<E> 中的 equals
指定者:
介面 Set<E> 中的 equals
覆寫:
類別 AbstractSet<E> 中的 equals
參數:
o - 將與此 set 進行相等性比較的物件
返回:
如果指定的物件與此 set 相等,則返回 true
另請參見:
Object.hashCode(), Hashtable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only