记一次对HashSet浅薄的理解

        在开发过程中,本人一直习惯使用HashMap存储相关数据,很少想到HashSet。此次遇到了HashMap中有重复元素,在双重循环取数据的时候,出现数据大量冗余。由此想到了HashSet是不能存在重复元素的。继而,深入学习了一下HashSet,对HastSet做了一点浅薄的记录。

        话不多说,学习集合框架首选得看源码。点击源码进去,告诉我你看到了什么。

       

        尼玛,这是什么鬼。所有的构造方法都是new 一个HashMap????。坑爹呢。那它是怎么保证元素不能重复的???

        看看它的add方法。它的值是一个写死的  private static final Object PRESENT = new Object();

        

       这么说,hashSet的元素是存储在hashMap的key中的咯,它的值的给定的一个new Object()。

      事实还真是如此。

      在HashMap中key是唯一的,但是他的value可以是重复的。

      而HashSet中,由于它的元素的存储在HashMao中的key上,所以它保证了HashSet元素不能重复。当有新值加入add时,底层的hashMap会判断key是否存在,如果不存在,则插入新值,同时这个插入的细节会依照HashMap插入细节;如果存在就不插入

      网上查看了一下其他大佬的博客,结果发现跟我所理解的差不多。我这里就略记到此。深入的理解请移步大佬的博客

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值