- 类型参数:
-
E
- 此集合中维护的元素类型
- 所有实现的接口:
-
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,Set<E>
- 直接已知的子类:
-
JobStateReasons
,LinkedHashSet
Set
接口,由哈希表(实际上是HashMap
实例)支持。它不保证集合的迭代顺序;特别是,它不保证顺序会随时间保持不变。此类允许null
元素。
此类对基本操作(add
、remove
、contains
和size
)提供恒定时间性能,假设哈希函数将元素正确分散在桶中。遍历此集合需要的时间与HashSet
实例的大小(元素数量)加上支持HashMap
实例的“容量”(桶数量)之和成正比。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子设置得太低)非常重要。
请注意,此实现不是同步的。如果多个线程同时访问哈希集,并且至少有一个线程修改了集合,则必须在外部进行同步。通常通过在自然封装集合的某个对象上同步来实现这一点。如果不存在这样的对象,则应使用Collections.synchronizedSet
方法“包装”集合。最好在创建时执行此操作,以防止意外的非同步访问集合:
Set s = Collections.synchronizedSet(new HashSet(...));
此类的iterator
方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间修改了集合,除非通过迭代器自身的remove
方法,否则迭代器会抛出ConcurrentModificationException
。因此,在面对并发修改时,迭代器会快速且干净地失败,而不是在未来的不确定时间冒险地面临任意的、非确定性的行为。
请注意,迭代器的快速失败行为不能保证,因为一般来说,在存在非同步并发修改的情况下,不可能做出任何硬性保证。快速失败迭代器尽力抛出ConcurrentModificationException
。因此,编写依赖此异常正确性的程序是错误的:迭代器的快速失败行为应仅用于检测错误。
此类是Java集合框架的成员。
- 自 JDK 版本:
- 1.2
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
如果此元素尚未存在,则将指定元素添加到此集合中。void
clear()
从此集合中移除所有元素。clone()
返回此HashSet
实例的浅拷贝:元素本身不会被克隆。boolean
如果此集合包含指定元素,则返回true
。boolean
isEmpty()
如果此集合不包含任何元素,则返回true
。iterator()
返回此集合中元素的迭代器。static <T> HashSet
<T> newHashSet
(int numElements) 创建一个新的、适用于预期元素数量的空HashSet。boolean
如果存在,则从此集合中移除指定元素。int
size()
返回此集合中的元素数量(基数)。创建一个延迟绑定和快速失败的Spliterator
,用于遍历此集合中的元素。Object[]
toArray()
返回包含此集合中所有元素的数组。<T> T[]
toArray
(T[] a) 返回包含此集合中所有元素的数组;返回数组的运行时类型是指定数组的类型。Methods declared in class java.util.AbstractSet
equals, hashCode, removeAll
Methods declared in class java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString
Methods declared in interface java.util.Collection
parallelStream, removeIf, stream, toArray
-
Constructor Details
-
HashSet
public HashSet()构造一个新的空集;支持的HashMap
实例具有默认的初始容量(16)和负载因子(0.75)。 -
HashSet
构造一个包含指定集合中的元素的新集合。使用默认负载因子(0.75)创建HashMap
,并且初始容量足以容纳指定集合中的元素。- 参数:
-
c
- 要放入此集合中的元素的集合 - 抛出:
-
NullPointerException
- 如果指定的集合为 null
-
HashSet
public HashSet(int initialCapacity, float loadFactor) 构造一个新的空集;支持的HashMap
实例具有指定的初始容量和指定的负载因子。- API 注意:
-
要创建一个初始容量适应预期元素数量的
HashSet
,请使用newHashSet
。 - 参数:
-
initialCapacity
- 哈希映射的初始容量 -
loadFactor
- 哈希映射的负载因子 - 抛出:
-
IllegalArgumentException
- 如果初始容量小于零,或者负载因子为非正数
-
HashSet
public HashSet(int initialCapacity) 构造一个新的空集;支持的HashMap
实例具有指定的初始容量和默认负载因子(0.75)。- API 注意:
-
要创建一个初始容量适应预期元素数量的
HashSet
,请使用newHashSet
。 - 参数:
-
initialCapacity
- 哈希表的初始容量 - 抛出:
-
IllegalArgumentException
- 如果初始容量小于零
-
-
Method Details
-
iterator
返回此集合中元素的迭代器。元素以无特定顺序返回。 -
size
public int size()返回此集合中元素的数量(基数)。 -
isEmpty
public boolean isEmpty()如果此集合不包含任何元素,则返回true
。- 指定由:
-
isEmpty
在接口Collection<E>
中 - 指定由:
-
isEmpty
在接口Set<E>
中 - 覆盖自:
-
isEmpty
在类AbstractCollection<E>
中 - 返回:
-
true
如果此集合不包含任何元素
-
contains
返回true
如果此集合包含指定的元素。更正式地说,当且仅当此集合包含一个元素e
使得Objects.equals(o, e)
返回true
时,返回true
。- 指定由:
-
contains
在接口Collection<E>
中 - 指定由:
-
contains
在接口Set<E>
中 - 覆盖自:
-
contains
在类AbstractCollection<E>
中 - 参数:
-
o
- 要测试其是否存在于此集合中的元素 - 返回:
-
true
如果此集合包含指定的元素
-
add
如果尚未存在,则将指定的元素添加到此集合。更正式地说,如果此集合不包含任何使得Objects.equals(e, e2)
返回true
的元素e2
,则将指定的元素e
添加到此集合。如果此集合已包含该元素,则调用不会更改集合并返回false
。- 指定由:
-
add
在接口Collection<E>
中 - 指定由:
-
add
在接口Set<E>
中 - 覆盖自:
-
add
在类AbstractCollection<E>
中 - 参数:
-
e
- 要添加到此集合的元素 - 返回:
-
true
如果此集合之前未包含指定的元素
-
remove
如果存在,则从此集合中移除指定的元素。更正式地说,如果此集合包含使得Objects.equals(o, e)
返回true
的元素e
,则移除该元素。如果此集合包含该元素,则返回true
(或者等效地,如果此集合由于调用而更改)。(一旦调用返回,此集合将不包含该元素。)- 指定由:
-
remove
在接口Collection<E>
中 - 指定由:
-
remove
在接口Set<E>
中 - 覆盖自:
-
remove
在类AbstractCollection<E>
中 - 参数:
-
o
- 如果存在,则从此集合中移除的对象 - 返回:
-
true
如果集合包含指定的元素
-
clear
public void clear()从此集合中移除所有元素。调用返回后,集合将为空。- 指定由:
-
clear
在接口Collection<E>
中 - 指定由:
-
clear
在接口Set<E>
中 - 覆盖自:
-
clear
在类AbstractCollection<E>
中
-
clone
返回此HashSet
实例的浅拷贝:元素本身不会被克隆。 -
spliterator
创建一个延迟绑定和快速失败Spliterator
,用于遍历此集合中的元素。Spliterator
报告Spliterator.SIZED
和Spliterator.DISTINCT
。重写的实现应该记录其他特征值的报告。- 指定由:
-
spliterator
在接口Collection<E>
中 - 指定由:
-
spliterator
在接口Iterable<E>
中 - 指定由:
-
spliterator
在接口Set<E>
中 - 返回:
-
一个
Spliterator
,用于遍历此集合中的元素 - 自1.8起:
- 1.8
-
toArray
从类中复制的描述:AbstractCollection
返回一个包含此集合中所有元素的数组。如果此集合对其元素由其迭代器返回的顺序有任何保证,那么此方法必须以相同顺序返回元素。返回的数组的运行时组件类型为Object
。返回的数组将是“安全”的,即此集合不会保留对其的任何引用。(换句话说,即使此集合由数组支持,此方法也必须分配一个新数组)。因此,调用者可以自由修改返回的数组。
- 指定由:
-
toArray
在接口Collection<E>
中 - 指定由:
-
toArray
在接口Set<E>
中 - 覆盖自:
-
toArray
在类AbstractCollection<E>
中 - 返回:
-
一个数组,其运行时组件类型为
Object
,包含此集合中的所有元素
-
toArray
public <T> T[] toArray(T[] a) 从类中复制的描述:AbstractCollection
返回一个包含此集合中所有元素的数组;返回数组的运行时类型与指定数组的类型相同。如果集合适合于指定数组,则将其返回。否则,将使用指定数组的运行时类型和此集合的大小分配一个新数组。如果此集合适合于指定数组且有多余空间(即,数组的元素多于此集合的元素),则数组中紧随集合末尾的元素将设置为
null
。(仅当调用者知道此集合不包含任何null
元素时,此方法才有助于确定此集合的长度。)如果此集合对其元素由其迭代器返回的顺序有任何保证,那么此方法必须以相同顺序返回元素。
- 指定者:
-
toArray
在接口Collection<E>
- 指定者:
-
toArray
在接口Set<E>
- 覆盖:
-
toArray
在类AbstractCollection<E>
- 类型参数:
-
T
- 包含集合的数组的组件类型 - 参数:
-
a
- 要存储此集合元素的数组,如果足够大;否则,将为此目的分配相同运行时类型的新数组。 - 返回值:
- 包含此集合中所有元素的数组
-
newHashSet
创建一个新的、空的HashSet,适用于预期元素数量。返回的集合使用默认的负载因子0.75,并且其初始容量通常足够大,以便可以添加预期数量的元素而无需调整集合大小。- 类型参数:
-
T
- 新集合中维护的元素类型 - 参数:
-
numElements
- 预期元素数量 - 返回值:
- 新创建的集合
- 抛出:
-
IllegalArgumentException
- 如果numElements为负数 - 自 JDK 版本:
- 19
-