1. HashSet是使用HashMap來實現的spa
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. 總結code
(1)因爲在hashMap中key不能夠重複因此HashSet中的元素不可重複。blog
(2)同理hashMap中容許key爲null,所以HashSet中的key也能夠是null。ci
(3)LinkedHashSet是使用LinkedHashMap實現的,原理類似。hash
(4)TreeSet是使用NavigbleMap來實現的,原理同上。it