Java-API简析_java.util.HashSet<E>类(基于 Latest JDK)(浅析源码)

HashSet是Java中实现Set接口的类,基于哈希表(HashMap实例)支持。文章详细介绍了HashSet的构造方法、基本操作如add、remove、contains等,以及迭代器的行为。特别指出,此类非同步,迭代器在面对并发修改时可能会抛出ConcurrentModificationException。
摘要由CSDN通过智能技术生成

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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>

所有已实现的接口:
SerializableCloneableIterable<E>Collection<E>Set<E>

直接已知子类:
JobStateReasonsLinkedHashSet


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
另请参见:
CollectionSetTreeSetCollections.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三个版本》。


本文暂缓更新。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

感谢打赏!很高兴可以帮到你!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值