开发者社区> 问答> 正文

说一下 HashSet 的实现原理?

说一下 HashSet 的实现原理?

展开
收起
问问小秘 2020-01-03 13:44:59 2485 0
来自:Java开发者
2 条回答
写回答
取消 提交回答
  • 下一站是幸福

    HashSet简单的理解就是HashSet对象中不能存储相同的数据,存储数据时是无序的。

    2020-04-15 23:25:30
    赞同 展开评论 打赏
  • HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final Object PRESENT = new Object();

    HashSet中add方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put,首先会判断key是否存在,如果key存在则修改value值,如果key不存在这插入这个key-value。而在set中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在着不插入,这样HashSet中就不存在重复值。

     所以判断key是否存在就要重写元素的类的equals()和hashCode()方法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()比较两个对象是否相同,相同则不能被添加。

       iterator:返回对此set中元素进行迭代的迭代器      size:返回此set中元素的数量(set的容量)      isEmpty:判断Hashset集合是否为空      contains:判断某个元素是否存在于HashSet中      add():如果此set中尚未包含指定元素,则添加指定元素

    2020-01-03 13:45:14
    赞同 展开评论 打赏
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
Java开发者成长课堂,课程资料学习,实战案例解析,Java工程师必备词汇等你来~
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载