文章均爲本人技術筆記,轉載請註明出處:https://segmentfault.com/u/yzwalljava
HashSet是一個沒有重複元素的集;
HashSet能夠存儲null元素,不保證元素插入順序;
HashSet線程不安全的(因爲底層由HashMap實現);segmentfault
HashSet底層採用HashMap存儲:private transient HashMap<E,Object> map
。HashSet存儲元素實際爲TreeMap存儲的鍵值對爲<key,PRESENT>
的key;,PRESENT爲固定對象:private static final Object PRESENT = new Object()
;
因爲HashMap中key不可重複,從而實現HashSet元素不可重複;安全
HashSet支持迭代器和foreach兩種遍歷方式:this
// 遍歷HashSet:迭代器實現 Iterator iter = set.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } // 遍歷HashSet:foreach實現 for (Integer i : set) { System.out.println(i); }
TreeSet是一個有序集,基於TreeMap實現,是線程不安全的;線程
TreeSet支持兩種兩種排序方式,經過不一樣構造器調用實現code
天然排序:對象
public TreeSet() { // 新建TreeMap,天然排序 this(new TreeMap<E,Object>()); }
Comparator排序:排序
public TreeSet(Comparator<? super E> comparator) { // 新建TreeMap,傳入自定義比較器comparator this(new TreeMap<>(comparator)); }
TreeSet底層採用TreeMap存儲,構造器啓動時新建TreeMap。TreeSet存儲元素實際爲TreeMap存儲的鍵值對爲<key,PRESENT>
的key;,PRESENT爲固定對象:private static final Object PRESENT = new Object()
get
TreeSet支持正向/反向迭代器遍歷和foreach遍歷it
// 順序TreeSet:迭代器實現 Iterator iter = set.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } // 順序遍歷TreeSet:foreach實現 for (Integer i : set) { System.out.println(i); } // 逆序遍歷TreeSet:反向迭代器實現 Iterator iter1 = set.descendingIterator(); while (iter1.hasNext()) { System.out.println(iter1.next()); }