HashSet源码

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

   

   

   

HashSet中的元素都存放在HashMapkey上面,相对于HashMap用了一个entry存放keyvalueHashSet只存放了key值,也就只用到了HashMap中的key

   

value中的值都是统一的一个private static final Object PRESENT = new Object();

   

   

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

   

   

   

   

   

   

原文地址:https://www.cnblogs.com/keedor/p/4390254.html