首页 > 其他 > 详细

Set存储元素为啥是唯一的(以HashSet为例源码分析)

时间:2019-03-04 16:06:09      阅读:221      评论:0      收藏:0      [点我收藏+]

本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正!

说些废话

  以前面试的时候会遇到有人问Set 和list的区别 这个很好说,但前几天有同事面试分享了面试过程 问到了 Set和List区别了,同事回答了!紧接着 面试官问Set问啥可以保证存储的值不会重复,他说他的表情瞬间凝固了,逗乐了我!其实我也不是很清楚,决定研究一下源码,以下源码基于jdk1.8

 

源码分析

变量定义

     
   // HashSet存储数据是放在HashMap中的
  private transient HashMap<E,Object> map;

    //Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

add方法

/***
 **  可以看到添加元素时会把值当做 HashMap的 key存进去 看到这里应该明白了吧!
 **  HashMap的key是唯一的
 ***/
 
public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

 

总结

  HashSet存储元素不会重复通过源码分析:  HashSet的内部存储结构 是HashMap,存储元素时 元素会作为HashMap的key值存入,HashMap的key是不会重复的!

 

Set存储元素为啥是唯一的(以HashSet为例源码分析)

原文:https://www.cnblogs.com/lyhc/p/10470702.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!