JavaTM 2 Platform
Standard Ed. 6

java.util
類別 HashSet<E>

java.lang.Object
  繼承者 java.util.AbstractCollection<E>
      繼承者 java.util.AbstractSet<E>
          繼承者 java.util.HashSet<E>
型別參數:
E - 此 set 所維護的元素的型別
所有已實作的介面:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>
直接已知子類別:
JobStateReasons, LinkedHashSet

public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, Serializable

此類別實作 Set 介面,由雜湊表(實際上是一個 HashMap 實例)支持。它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。此類別允許使用 null 元素。

此類別為基本操作提供了穩定性能,這些基本操作包括 addremovecontainssize,假定雜湊函數將這些元素正確地分佈在桶中。對此 set 進行迭代所需的時間與 HashSet 實例的大小(元素的數量)和底層 HashMap 實例(桶的數量)的「容量」的和成比例。因此,如果迭代性能很重要,則不要將初始容量設置得太高(或將載入因子設置得太低)。

注意,此實作不是同步的。如果多個執行緒同時存取一個雜湊 set,而其中至少一個執行緒修改了該 set,那麼它必須 保持外部同步。這通常是通過對自然封裝該 set 的物件執行同步操作來完成的。如果不存在這樣的物件,則應該使用 Collections.synchronizedSet 方法來「包裹」 set。最好在創建時完成這一操作,以防止對該 set 進行意外的不同步存取:

   Set s = Collections.synchronizedSet(new HashSet(...));

此類別的 iterator 方法返回的迭代器是快速失敗 的:在創建迭代器之後,如果對 set 進行修改,除非通過迭代器自身的 remove 方法,否則在任何時間以任何方式對其進行修改,Iterator 都將拋出 ConcurrentModificationException。因此,面對共時的修改,迭代器很快就會完全失敗,而不冒將來在某個不確定時間發生任意不確定行為的風險。

注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步共時修改做出任何硬性保證。快速失敗迭代器在盡最大努力拋出 ConcurrentModificationException。因此,為提高這類別迭代器的正確性而編寫一個依賴於此異常的程序是錯誤做法:迭代器的快速失敗行為應該僅用於檢測 bug。

此類別是 Java Collections Framework 的成員。

從以下版本開始:
1.2
另請參見:
Collection, Set, TreeSet, HashMap, 序列化表格

建構子摘要
HashSet()
          建構一個新的空 set,其底層 HashMap 實例的預設初始容量是 16,載入因子是 0.75。
HashSet(Collection<? extends E> c)
          建構一個套件含指定 collection 中的元素的新 set。
HashSet(int initialCapacity)
          建構一個新的空 set,其底層 HashMap 實例具有指定的初始容量和預設的載入因子(0.75)。
HashSet(int initialCapacity, float loadFactor)
          建構一個新的空 set,其底層 HashMap 實例具有指定的初始容量和指定的載入因子。
 
方法摘要
 boolean add(E e)
          如果此 set 中尚未包含指定元素,則添加指定元素。
 void clear()
          從此 set 中移除所有元素。
 Object clone()
          返回此 HashSet 實例的淺表副本:並沒有複製這些元素本身。
 boolean contains(Object o)
          如果此 set 套件含指定元素,則返回 true
 boolean isEmpty()
          如果此 set 不包含任何元素,則返回 true
 Iterator<E> iterator()
          返回對此 set 中元素進行迭代的迭代器。
 boolean remove(Object o)
          如果指定元素存在於此 set 中,則將其移除。
 int size()
          返回此 set 中的元素的數量(set 的容量)。
 
從類別 java.util.AbstractSet 繼承的方法
equals, hashCode, removeAll
 
從類別 java.util.AbstractCollection 繼承的方法
addAll, containsAll, retainAll, toArray, toArray, toString
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 
從介面 java.util.Set 繼承的方法
addAll, containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray
 

建構子詳細資訊

HashSet

public HashSet()
建構一個新的空 set,其底層 HashMap 實例的預設初始容量是 16,載入因子是 0.75。


HashSet

public HashSet(Collection<? extends E> c)
建構一個套件含指定 collection 中的元素的新 set。使用預設的載入因子 0.75 和足以包含指定 collection 中所有元素的初始容量來創建 HashMap

參數:
c - 其中的元素將存放在此 set 中的 collection
拋出:
NullPointerException - 如果指定的 collection 為 null

HashSet

public HashSet(int initialCapacity,
               float loadFactor)
建構一個新的空 set,其底層 HashMap 實例具有指定的初始容量和指定的載入因子。

參數:
initialCapacity - 雜湊映射的初始容量
loadFactor - 雜湊映射的載入因子
拋出:
IllegalArgumentException - 如果初始容量小於零,或者載入因子為非正數

HashSet

public HashSet(int initialCapacity)
建構一個新的空 set,其底層 HashMap 實例具有指定的初始容量和預設的載入因子(0.75)。

參數:
initialCapacity - 雜湊表的初始容量
拋出:
IllegalArgumentException - 如果初始容量小於零
方法詳細資訊

iterator

public Iterator<E> iterator()
返回對此 set 中元素進行迭代的迭代器。返回元素的順序並不是特定的。

指定者:
介面 Iterable<E> 中的 iterator
指定者:
介面 Collection<E> 中的 iterator
指定者:
介面 Set<E> 中的 iterator
指定者:
類別 AbstractCollection<E> 中的 iterator
返回:
對此 set 中元素進行迭代的 Iterator
另請參見:
ConcurrentModificationException

size

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

指定者:
介面 Collection<E> 中的 size
指定者:
介面 Set<E> 中的 size
指定者:
類別 AbstractCollection<E> 中的 size
返回:
此 set 中的元素的數量(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

add

public boolean add(E e)
如果此 set 中尚未包含指定元素,則添加指定元素。更確切地講,如果此 set 沒有包含滿足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,則向此 set 添加指定的元素 e。如果此 set 已包含該元素,則該調用不更改 set 並返回 false

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

remove

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

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

clear

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

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

clone

public Object clone()
返回此 HashSet 實例的淺表副本:並沒有複製這些元素本身。

覆寫:
類別 Object 中的 clone
返回:
此 set 的淺表副本
另請參見:
Cloneable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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