网站首页 > 编程文章 正文
1.简介
继续分析源码,上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。
HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。
HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。(参考JDK1.8文档,关注回复JDK可获取中文版JDK文档)
Set s = Collections.synchronizedSet(new HashSet(...));
上文链接:
1.继承结构
先看一下HashMap的继承结构
和其他集合一样HashSet也实现了Cloneable和Serializable两个接口,同时也是先了Set接口实现了Set的一些接口规范。
- Cloneable 克隆
- Serializable序列化
2属性
HashSet的存储数据是由HashMap来实现的,所以HashMap的一些特性也都继承了过来。在阅读源码的时候千万不要直接的去阅读HashSet在阅读之前最好先把HashMap看了。在阅读HashMap的时候最好结合着1.7版本的源码一起看。
private transient HashMap<E,Object> map;
上面说到HashSet是由HashMap来实现的而存储的数据作为HashMap的K,V统一就是PRESENT
// Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object();
3.构造方法
无参构造方法,直接创建一个HashMap采用无参构造方法的默认属性上篇文章说过默认容量是16加载因子是0.75
指定容量
指定容量和加载因子,加载因子在HashMap中用来计算容量默认的就是总容量*加载因子,默认的加载因子是0.75
指定集合元素
4.添加
可以看出HashSet使用put进行添加元素,要添加的元素作为mapd的Key 而value则默认的就是PRESENT。上篇文章介绍过HashMap的put方法如果插入的值的Key不存在则返回null否则就返回已经存在的值,所以这里做了一个判断。是不是很简单。
5.查找
查找元素调用了HashMap的containsKey方法如果存在返回true不存在返回false。
6.删除
删除方法也是调用map的remove方法,看到这里我们看出HashSet全部是依赖于HashMap。
7.迭代方法
也是通过Map来实现使用keySet来返回一个key的Iterator。
8.总结
其实HashSet的一些东西都是用HashMap来实现的,如果HashMap的源码已经阅读过的话基本上没有什么问题。(这可能是我写的最轻松的一篇问文章哈哈哈哈哈)
猜你喜欢
- 2024-09-09 Java JDK11 在Linux上的安装和配置
- 2024-09-09 一份详细介绍JVM的资料(对比JDK8和JDK7)
- 2024-09-09 应用服务器安装指南(应用服务器安装指南下载)
- 2024-09-09 [信创]SpringBoot3 JDK17 整合 MyBatis + 达梦DM8(一)
- 2024-09-09 浅谈 Java线程状态转换及控制(java线程状态转换图)
- 2024-09-09 jdk 1.8 stream基本用法(jdk8 stream map)
- 2024-09-09 jdk安装、配置文档(jdk安装配置教程)
- 2024-09-09 2021年官网下载各个版本JDK最全版与官网查阅方法
- 2024-09-09 11.2.JDK5~JDK8各个版本新特性(jdk8u5)
- 2024-09-09 jdk1.8就带有的Lambda表达式,现在1.9都发布了你不会还没用过吧
你 发表评论:
欢迎- 最近发表
-
- 数据不丢失 从Windows 11的DEV版降级到正式版
- Win11学院:在Windows11 25905预览版中如何启用Dev Drive
- DEVC++的卸载(devcon卸载驱动)
- win11 dev 开发版 升级攻略完整版
- 最新Windows11+Windows10系统各种版本永久激活密钥以及下载链接
- 想学Python,却还记不住语法?神仙书籍 python背记手册双手奉上
- 如何用Python语言开发大型服务器程序
- 30天Python 入门到精通(python零基础入门到精通)
- 入门扫盲:9本自学Python PDF书籍,让你避免踩坑,轻松变大神!
- 学好Python需要看的4本书推荐(学python好用的书)
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)