HashSet源碼分析

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

相關文章
相關標籤/搜索