HashSet源码分析
1. HashSet是使用HashMap来实现的
public HashSet() { map = new 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(); //虚拟值,用来表示hashMap中的value值,在set中的值都是以key的形式存储在hashMap中
public boolean add(E e) { //add()方法将元素作为key,并以PRESENT为value存入HashMap中 return map.put(e, PRESENT)==null; }
2. 总结
(1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。
(2)同理hashMap中允许key为null,因此HashSet中的key也可以是null。
(3)LinkedHashSet是使用LinkedHashMap实现的,原理相似。
(4)TreeSet是使用NavigbleMap来实现的,原理同上。