首页 课程 师资 教程 报名

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

  • 2020-05-25 16:01:49
  • 2089次 动力节点

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实现之源码解析”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交