记一次对HashSet浅薄的理解

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

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

       记一次对HashSet浅薄的理解_第1张图片

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

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

        记一次对HashSet浅薄的理解_第2张图片

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

      事实还真是如此。

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

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

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

 

 

你可能感兴趣的:(记一次对HashSet浅薄的理解)