【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/129917996
出自【进步*于辰的博客】
文章目录
1、概述
继承关系:
- java.lang.Object
- java.util.AbstractCollection
<E>
- java.util.AbstractSet
<E>
- java.util.HashSet
<E>
- java.util.HashSet
- java.util.AbstractSet
- java.util.AbstractCollection
所有已实现的接口:
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()
来“包装”集合。最好在创建时完成这一操作,以防止对 HashSet 实例进行意外的不同步访问:
Set s = Collections.synchronizedSet(new HashSet(...));
此类的 iterator()
返回的迭代器是 快速失败 的:在创建迭代器之后,如果对集合进行修改,除非通过迭代器自身的 remove()
,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。
注意 \color{red}{注意} 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器在尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测程序错误。
此类是 Java Collections Framework
的成员。
从以下版本开始:
1.2
另请参见:
Collection、Set、TreeSet、Collections.synchronizedSet(Set)(见源博文的第2.42项)、HashMap、序列化表格
2、构造方法摘要
2.1 null
构造一个新的空集合,其底层 HashMap 实例的默认初始容量是 16
,加载因子是 0.75
。
2.2 Collection<? extends E> c
构造一个包含指定 collection 中的元素的新 set。
2.3 int initialCapacity
构造一个新的空集合,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75
)。
2.4 int initialCapacity, float loadFactor
构造一个新的空集合,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。
3、方法摘要
3.1 boolean add(E o)
如果此集合中还不包含指定元素,则添加指定元素。
3.2 void clear()
从此集合中移除所有元素。
3.3 Object clone()
返回此 HashSet 实例的浅表复制:并没有克隆这些元素本身。
3.4 boolean contains(Object o)
Returns 如果此集合不包含指定元素,则返回 true。
3.5 boolean isEmpty()
如果此集合不包含任何元素,则返回 true。
3.6 Iterator<E>
iterator()
返回对此集合中元素进行迭代的迭代器。
3.7 boolean remove(Object o)
如果指定元素存在于此集合中,则将其移除。
3.8 int size()
返回此集合中的元素的数量(集合的容量)。
最后
如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。
本文暂缓更新。