- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractSet<E>
-
- java.util.HashSet<E>
-
- 参数类型
-
E
- 由此集合维护的元素的类型
- All Implemented Interfaces:
-
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,Set<E>
- 已知直接子类:
-
JobStateReasons
,LinkedHashSet
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable
该类实现Set
接口,由哈希表(实际为HashMap
实例)支持。 对集合的迭代顺序不作任何保证; 特别是,它不能保证订单在一段时间内保持不变。 这个类允许null
元素。这个类提供了基本的操作(固定时间性能
add
,remove
,contains
和size
),假定哈希函数将分散的桶中正确的元素。 迭代该集合需要与HashSet
实例的大小(元素数量)加上后备HashMap
实例(桶数)的“容量”的总和成比例的时间。 因此,如果迭代性能很重要,不要将初始容量设置得太高(或负载因子太低)是非常重要的。请注意,此实现不同步。 如果多个线程并发访问哈希集,并且至少有一个线程修改该集合,那么它必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果没有这样的对象存在,则应该使用
Collections.synchronizedSet
方法“包装”。 这最好在创建时完成,以防止意外的非同步访问集:Set s = Collections.synchronizedSet(new HashSet(...));
此类的
iterator
方法返回的迭代器是故障快速的 :如果在迭代器创建后的任何时间对集进行了修改,除了通过迭代器自己的remove
方法之外,迭代器会抛出一个ConcurrentModificationException
。 因此,面对并发修改,迭代器将快速而干净地失败,而不是在未来未确定的时间冒着任意的非确定性行为。请注意,迭代器的故障快速行为无法保证,因为一般来说,在不同步并发修改的情况下,无法做出任何硬性保证。 失败快速的迭代器
ConcurrentModificationException
抛出ConcurrentModificationException
。 因此,编写依赖于此异常的程序的正确性将是错误的: 迭代器的故障快速行为应仅用于检测错误。这个班是Java Collections Framework的会员。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Collection
,Set
,TreeSet
,HashMap
, Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 HashSet()
构造一个新的空集合; 背景HashMap
实例具有默认初始容量(16)和负载因子(0.75)。HashSet(int initialCapacity)
构造一个新的空集合; 支持HashMap
实例具有指定的初始容量和默认负载因子(0.75)。HashSet(int initialCapacity, float loadFactor)
构造一个新的空集合; 支持HashMap
实例具有指定的初始容量和指定的负载因子。HashSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新集合。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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和故障快速Spliterator
。-
Methods inherited from class java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString
-
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
-
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream
-
-
-
-
构造方法详细信息
-
HashSet
public HashSet()
构造一个新的空集合; 背景HashMap
实例具有默认初始容量(16)和负载因子(0.75)。
-
HashSet
public HashSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新集合。HashMap
以默认负载因子(0.75)创建,初始容量足以包含指定集合中的元素。- 参数
-
c
-c
元素放置到此集合中的集合 - 异常
-
NullPointerException
- 如果指定的集合为空
-
HashSet
public HashSet(int initialCapacity, float loadFactor)
构造一个新的空集合; 支持HashMap
实例具有指定的初始容量和指定的负载因子。- 参数
-
initialCapacity
- 哈希映射的初始容量 -
loadFactor
- 哈希映射的负载因子 - 异常
-
IllegalArgumentException
- 如果初始容量小于零,或负载系数是否为正
-
HashSet
public HashSet(int initialCapacity)
构造一个新的空集合; 支持HashMap
实例具有指定的初始容量和默认负载因子(0.75)。- 参数
-
initialCapacity
- 哈希表的初始容量 - 异常
-
IllegalArgumentException
- 如果初始容量小于零
-
-
方法详细信息
-
iterator
public Iterator<E> iterator()
返回此集合中元素的迭代器。 元素没有特定的顺序返回。- Specified by:
-
iterator
在接口Collection<E>
- Specified by:
-
iterator
在接口Iterable<E>
- Specified by:
-
iterator
在接口Set<E>
- Specified by:
-
iterator
在AbstractCollection<E>
- 结果
- 这个集合中的元素的迭代器
- 另请参见:
-
ConcurrentModificationException
-
size
public int size()
返回此集合中的元素数(其基数)。- Specified by:
-
size
在接口Collection<E>
- Specified by:
-
size
在接口Set<E>
- Specified by:
-
size
在AbstractCollection<E>
- 结果
- 该集合中的元素数(其基数)
-
isEmpty
public boolean isEmpty()
如果此集合不包含元素,则返回true
。- Specified by:
-
isEmpty
在接口Collection<E>
- Specified by:
-
isEmpty
在接口Set<E>
- 重写:
-
isEmpty
在AbstractCollection<E>
- 结果
-
true
如果此集合不包含元素
-
contains
public boolean contains(Object o)
如果此集合包含指定的元素,则返回true
。 更正式地说,返回true
当且仅当此set包含的元素e
这样Objects.equals(o, e)
。- Specified by:
-
contains
在接口Collection<E>
- Specified by:
-
contains
在接口Set<E>
- 重写:
-
contains
在AbstractCollection<E>
- 参数
-
o
- 要在此集合中存在的元素要进行测试 - 结果
-
true
如果此集合包含指定的元素
-
add
public boolean add(E e)
将指定的元素添加到此集合(如果尚未存在)。 更正式地,如果该集合不包含元素e2
,使得指定的元素e
为Objects.equals(e, e2)
。 如果该集合已经包含该元素,则该呼叫将保持不变,并返回false
。- Specified by:
-
add
在接口Collection<E>
- Specified by:
-
add
在接口Set<E>
- 重写:
-
add
在AbstractCollection<E>
- 参数
-
e
- 要添加到此集合的元素 - 结果
-
true
如果此集合尚未包含指定的元素
-
remove
public boolean remove(Object o)
如果存在,则从该集合中删除指定的元素。 更正式地,删除元素e
,使得Objects.equals(o, e)
,如果这个集合包含这样的元素。 如果此集合包含元素(或等效地,如果该集合由于调用而更改),则返回true
。 (一旦调用返回,此集合将不包含该元素。)- Specified by:
-
remove
在接口Collection<E>
- Specified by:
-
remove
在接口Set<E>
- 重写:
-
remove
在AbstractCollection<E>
- 参数
-
o
- 要从此集合中删除的对象(如果存在) - 结果
-
true
如果集合包含指定的元素
-
clear
public void clear()
从此集合中删除所有元素。 此呼叫返回后,该组将为空。- Specified by:
-
clear
在接口Collection<E>
- Specified by:
-
clear
在接口Set<E>
- 重写:
-
clear
在AbstractCollection<E>
-
clone
public Object clone()
返回此HashSet
实例的浅拷贝:元素本身不被克隆。
-
spliterator
public Spliterator<E> spliterator()
在此集合中的元素上创建late-binding和故障快速Spliterator
。Spliterator
报告Spliterator.SIZED
和Spliterator.DISTINCT
。 覆盖实现应记录其他特征值的报告。- Specified by:
-
spliterator
在接口Collection<E>
- Specified by:
-
spliterator
在接口Iterable<E>
- Specified by:
-
spliterator
在接口Set<E>
- 结果
-
一个
Spliterator
在这个集合中的元素 - 从以下版本开始:
- 1.8
-
-