HashSet 实现不重复的的关键原因

这个世上没有无用的齿轮,也只有齿轮本身能决定自己的用途.

——东野圭吾《嫌疑犯X的献身》

Q:你了解 HashSet 吗?

这个必须了解呀!

该类实现了Set接口,有一个哈希表(实际上就是一个HashMap实例)后备。
它不保证迭代顺序;特别是,它不保证迭代顺序在一段时间内保持不变。这个类允许null元素。
该类为基本操作(add, remove, contains , size)提供了常量的时间性能,假设哈希函数将元素均匀地分散到了各桶中。迭代这个集合需要的时间与HashSet实例的大小(元素的数量)加上后备的HashMap实例的 "容量"(桶的数量)之和成正比。因此,如果对迭代性能要求很高,不要把初始容量设置得太高(或负载因子太低),这一点非常重要。

该类实现也是非同步的。如果多个线程并发访问一个HashSet,而其中至少有一个线程修改了该set,则必须进行外部同步。这通常是通过在一些自然封装了该集set的对象上进行同步来实现的。如果不存在这样的对象,应该使用Collections.synchronizedSet方法对集进行 "封装"。这最好是在创建时进行,以防止意外的非同步访问set。

Set s = Collections.synchronizedSet(new HashSet(...));

支持快速失败机制,这个类也是Java集合框架中的一个成员。

> 其实类注释也没强调保证元素不重复,需要在面试时自己记得补充.

Set 不保存重复的元素。如果试图将相同对象的多个实例添加到 Set 中,那么它会阻止这种重复行为。
Set 最常见的用途是测试归属性,可以很轻松地询问某个对象是否在一个 Set 中。因此,查找通常是 Set 最重要的操作,通常就 会选择 HashSet 实现,该实现针对快速查找进行了优化。

Q:那你说说为什么他能保证元素不重复呢?

> 这

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java源码模拟面试解析指南 文章被收录于专栏

<p> “挨踢”业行情日益严峻,企业招聘门槛愈来愈高,大厂hc更是少之又少,而Java技术面试普遍对基础知识的掌握考察特别深,大多数同学突击所看的 Java 面试基础知识点根本达不到面试官近乎挑剔的要求。 本专刊针对如今的校招及社招痛点,深入解析 JDK 的核心源码,探究 JDK 的设计精髓及最佳实践,同时以模拟面试的场景切入,让同学们在阅读过程中也能轻松掌握面试技巧。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p>

全部评论
最后的equals哦,小瑕疵😁
点赞 回复 分享
发布于 2020-09-05 21:51

相关推荐

10-17 23:18
已编辑
西北农林科技大学 Web前端
独行m:给25可以试试,但他只能给12,那就是纯纯的事精
秋招,不懂就问
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务