HashSet源码分析:JDK源码系列-创新互联

1.简介

继续分析源码,上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。

成都创新互联公司服务项目包括惠阳网站建设、惠阳网站制作、惠阳网页制作以及惠阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,惠阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到惠阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。

HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。(参考JDK1.8文档,关注回复JDK可获取中文版JDK文档)

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

上文链接:

HashMap源码阅读(一)

HashMap源码阅读(二)

1.继承结构

先看一下HashMap的继承结构

HashSet源码分析:JDK源码系列

和其他集合一样HashSet也实现了Cloneable和Serializable两个接口,同时也是先了Set接口实现了Set的一些接口规范。

  • Cloneable 克隆
  • Serializable序列化

2属性

HashSet的存储数据是由HashMap来实现的,所以HashMap的一些特性也都继承了过来。在阅读源码的时候千万不要直接的去阅读HashSet在阅读之前最好先把HashMap看了。在阅读HashMap的时候最好结合着1.7版本的源码一起看。

private transient HashMap 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

HashSet源码分析:JDK源码系列

指定容量

HashSet源码分析:JDK源码系列

指定容量和加载因子,加载因子在HashMap中用来计算容量默认的就是总容量*加载因子,默认的加载因子是0.75

HashSet源码分析:JDK源码系列

指定集合元素

HashSet源码分析:JDK源码系列

4.添加

HashSet源码分析:JDK源码系列

可以看出HashSet使用put进行添加元素,要添加的元素作为mapd的Key 而value则默认的就是PRESENT。上篇文章介绍过HashMap的put方法如果插入的值的Key不存在则返回null否则就返回已经存在的值,所以这里做了一个判断。是不是很简单。

5.查找

HashSet源码分析:JDK源码系列

查找元素调用了HashMap的containsKey方法如果存在返回true不存在返回false。

6.删除

HashSet源码分析:JDK源码系列

删除方法也是调用map的remove方法,看到这里我们看出HashSet全部是依赖于HashMap。

7.迭代方法

HashSet源码分析:JDK源码系列

也是通过Map来实现使用keySet来返回一个key的Iterator。

8.总结

其实HashSet的一些东西都是用HashMap来实现的,如果HashMap的源码已经阅读过的话基本上没有什么问题。(这可能是我写的最轻松的一篇问文章哈哈哈哈哈)

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文标题:HashSet源码分析:JDK源码系列-创新互联
标题网址:http://pwwzsj.com/article/dcshgp.html