专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java编程入门, hashset实现之源码解析

Java编程入门, hashset实现之源码解析

更新时间:2020-05-25 16:01:49 来源:动力节点 浏览1850次

HashSet的底层实现,因为HashSet底层是通过HashMap实现的。 所以HashSet底层也是通过哈希表的数据结构存储的。所以这里我们就不在介绍有关数据结构方面的知识了,下面我们从HashSet的初始化方面着手,来分析一下HashSet的底层实现。

初始化

Java编程入门, hashset实现之源码解析

我们看到,在HashSet中的无参构造方法中,直接创建了一个HashMap对象。这就证明了我们上述所说的,HashSet底层是通过HashMap实现的。我们在分析HashMap那篇文章中有提到过。如果我们使用无参的构造方法来创建HashMap对象,那么此时底层的数据结构不会初始化,第一次初始化发生在第一次调用put方法的时候。所以我们在这里可以说,当我们调用无参构造方法来创建HashSet对象时,底层的数据结构也不会执行初始化。那么它第一次初始化的动作,也应该发生在第一次调用添加元素的方法中,也就是HashSet中的add方法。下面我们看一下该方法的具体的逻辑。

Java编程入门, hashset实现之源码解析

上面代码是HashSet中add方法,我们看到该方法的逻辑是直接调用了HashMap中的put方法,并将添加的元素的值设置为HashMap中的key,value存储一个Object对象。

总结

分析到这里使我们知道HashSet有以下几点特性,它们分别是:

在HashSet中是不能保证元素的添加顺序与遍历顺序是一致的。因为底层是通过HashMap中的key的值保存的。因为HashMap中的key的值是通过key的hash code计算出来的。所以不能保证添加顺序与遍历顺序是一致的。

因为HashSet底层是通过HashMap中的key的值保存的,所以在HashSet中是不能保存重复元素的。因为在HashMap中的key也是不能重复的。如果在HashMap中保存了重复的key,那么后添加到HashMap中的value会替换掉先添加到HashMap中的value。

因为HashMap不是线程安全的集合类,并且我们分析HashSet源码时,也没有发现HashSet添加额外的同步关键字synchronized,所以说明HashSet也不是线程安全的集合类。

Java编程入门, hashset实现之源码解析

以上就是动力节点java培训机构的小编针对“Java编程入门, hashset实现之源码解析”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>