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

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策