HashSet源码

HashSet实现Set接口,其中的很多方法都是用一个HashMap实现的

   

   

   

HashSet中的元素都存放在HashMap的key上面,相对于HashMap用了一个entry存放key和value,HashSet只存放了key值,也就只用到了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中就不存在重复值。

   

   

   

   

   

   

转载地址:http://www.cnblogs.com/keedor/p/4390254.html

原文地址:https://www.cnblogs.com/2390624885a/p/6777255.html