HashSet & TreeSet小結

HashSet & TreeSet小結

聲明

文章均爲本人技術筆記,轉載請註明出處:https://segmentfault.com/u/yzwalljava

HashSet小結

HashSet簡介

HashSet是一個沒有重複元素的集
HashSet能夠存儲null元素,不保證元素插入順序;
HashSet線程不安全的(因爲底層由HashMap實現);segmentfault

HashSet底層實現

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遍歷方式

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小結

TreeSet是一個有序集,基於TreeMap實現,是線程不安全的;線程

TreeSet有序性實現

TreeSet支持兩種兩種排序方式,經過不一樣構造器調用實現code

  • 天然排序:對象

public TreeSet() {
        // 新建TreeMap,天然排序
        this(new TreeMap<E,Object>());
    }
  • Comparator排序:排序

public TreeSet(Comparator<? super E> comparator) {
        // 新建TreeMap,傳入自定義比較器comparator
        this(new TreeMap<>(comparator));
    }

TreeSet底層實現

TreeSet底層採用TreeMap存儲,構造器啓動時新建TreeMap。TreeSet存儲元素實際爲TreeMap存儲的鍵值對爲<key,PRESENT>的key;,PRESENT爲固定對象:private static final Object PRESENT = new Object()get


TreeSet遍歷方式

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());
}
相關文章
相關標籤/搜索