public class HashSet
extends AbstractSet<E>
implements Set<E>, Cloneable, Serializable
java.lang.Object | |||
↳ | java.util.AbstractCollection<E> | ||
↳ | java.util.AbstractSet<E> | ||
↳ | java.util.HashSet<E> |
Known Direct Subclasses |
该类实现了Set接口,由一个散列表(实际上是一个HashMap实例)支持。 它对集合的迭代次序没有任何保证; 特别是,它不能保证订单会随着时间的推移保持不变。 这个类允许null元素。
这个类提供了基本操作(add,remove,contains和size)固定的时间性能,假定哈希函数将分散的桶中正确的元素。 遍历该集合需要时间正比于HashSet实例的大小(元素的数量)加上所述背衬HashMap实例的“容量”(桶的数量)的总和。 因此,如果迭代性能很重要,不要将初始容量设置得太高(或者负载因子太低)是非常重要的。
请注意,此实现不同步。 如果多个线程同时访问散列集,并且至少有一个线程修改了该集,则它必须在外部同步。 这通常是通过在自然封装集合的某个对象上进行同步来完成的。 如果不存在这样的对象,则该组应该使用Collections.synchronizedSet
方法“包装”。 这最好在创建时完成,以防止意外的非同步访问:
Set s = Collections.synchronizedSet(new HashSet(...));
这个类的iterator方法返回的迭代器是快速失败的 :如果在迭代器创建后随时修改该集合,除了通过迭代器自己的remove方法之外,迭代器会抛出ConcurrentModificationException
。 因此,面对并发修改,迭代器快速而干净地失败,而不是在将来某个未确定的时间冒着任意的,非确定性的行为风险。
请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。 失败快速迭代器以尽力而为的方式抛出ConcurrentModificationException 。 因此,编写一个依赖于此异常的程序是正确的: 迭代器的快速失败行为应仅用于检测错误。
本课程是 Java Collections Framework的成员。
也可以看看:
Public constructors |
|
---|---|
HashSet() 构造一个新的空集; 背衬HashMap实例具有默认的初始容量(16)和负载因子(0.75)。 |
|
HashSet(Collection<? extends E> c) 构造一个包含指定集合中元素的新集合。 |
|
HashSet(int initialCapacity, float loadFactor) 构造一个新的空集; 后台HashMap实例具有指定的初始容量和指定的加载因子。 |
|
HashSet(int initialCapacity) 构造一个新的空集; 背景HashMap实例具有指定的初始容量和默认加载因子(0.75)。 |
Public methods |
|
---|---|
boolean |
add(E e) 如果指定的元素不存在,则将其添加到此集合中。 |
void |
clear() 删除此组中的所有元素。 |
Object |
clone() 返回此 HashSet实例的浅表副本:元素本身未被克隆。 |
boolean |
contains(Object o) 如果此集合包含指定的元素,则返回 true 。 |
boolean |
isEmpty() 如果此集合不包含元素,则返回 true 。 |
Iterator<E> |
iterator() 返回此集合中元素的迭代器。 |
boolean |
remove(Object o) 如果存在,则从该集合中删除指定的元素。 |
int |
size() 返回此集合中元素的数量(基数)。 |
Spliterator<E> |
spliterator() 在此集合中的元素上创建 late-binding和 快速故障 |
Inherited methods |
|
---|---|
From class java.util.AbstractSet
|
|
From class java.util.AbstractCollection
|
|
From class java.lang.Object
|
|
From interface java.util.Set
|
|
From interface java.util.Collection
|
|
From interface java.lang.Iterable
|
HashSet (Collection<? extends E> c)
构造一个包含指定集合中元素的新集合。 HashMap是使用默认加载因子(0.75)和足以包含指定集合中元素的初始容量创建的。
Parameters | |
---|---|
c |
Collection : the collection whose elements are to be placed into this set |
Throws | |
---|---|
NullPointerException |
if the specified collection is null |
HashSet (int initialCapacity, float loadFactor)
构造一个新的空集; 背景HashMap实例具有指定的初始容量和指定的负载因子。
Parameters | |
---|---|
initialCapacity |
int : the initial capacity of the hash map |
loadFactor |
float : the load factor of the hash map |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is less than zero, or if the load factor is nonpositive |
HashSet (int initialCapacity)
构造一个新的空集; 背景HashMap实例具有指定的初始容量和默认加载因子(0.75)。
Parameters | |
---|---|
initialCapacity |
int : the initial capacity of the hash table |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is less than zero |
boolean add (E e)
如果指定的元素不存在,则将其添加到此集合中。 更正式地说,如果这个集合不包含元素e2,例如(e==null ? e2==null : e.equals(e2)) ,则将指定元素e添加到此集合中。 如果该组已包含该元素,则该呼叫将保持该设置不变并返回false 。
Parameters | |
---|---|
e |
E : element to be added to this set |
Returns | |
---|---|
boolean |
true if this set did not already contain the specified element |
Object clone ()
返回此 HashSet实例的浅表副本:元素本身未被克隆。
Returns | |
---|---|
Object |
a shallow copy of this set |
boolean contains (Object o)
如果此集合包含指定的元素,则返回true 。 更正式地说,返回true当且仅当这个集合包含一个元素e,例如(o==null ? e==null : o.equals(e)) 。
Parameters | |
---|---|
o |
Object : element whose presence in this set is to be tested |
Returns | |
---|---|
boolean |
true if this set contains the specified element |
boolean isEmpty ()
如果此集合不包含元素,则返回 true 。
Returns | |
---|---|
boolean |
true if this set contains no elements |
Iterator<E> iterator ()
返回此集合中元素的迭代器。 元素以特定顺序返回。
Returns | |
---|---|
Iterator<E> |
an Iterator over the elements in this set |
boolean remove (Object o)
如果存在,则从该集合中删除指定的元素。 更正式地说,删除一个元素e,例如(o==null ? e==null : o.equals(e)) ,如果这个集合包含这样一个元素。 如果此集合包含元素(或者等价地,如果此集合因呼叫而改变),则返回true 。 (一旦调用返回,此集合将不包含该元素。)
Parameters | |
---|---|
o |
Object : object to be removed from this set, if present |
Returns | |
---|---|
boolean |
true if the set contained the specified element |
int size ()
返回此集合中元素的数量(基数)。
Returns | |
---|---|
int |
the number of elements in this set (its cardinality) |
Spliterator<E> spliterator ()
在此集合中的元素上创建 late-binding和 快速故障 Spliterator
。
Spliterator
报告SIZED
和DISTINCT
。 重写实现应记录附加特征值的报告。
Returns | |
---|---|
Spliterator<E> |
a Spliterator over the elements in this set |