流心奶黃:知味觀月餅 2 枚 9.9 元狂促(立減 10 元)
阿新 • • 發佈:2021-08-07
TreeMap
前言
- TreeMap實現了NavigableMap介面,並且NavigableMap繼承
SortedMap
介面,所以TreeMap介面是有序的 - 底層實現是紅黑樹,方法的時間複雜度不高,log(n)
- 非同步的
- 解決相等問題、排序問題,使用Comparator或者Comparable介面比較
域
-
private final Comparator<? super K> comparator;
- 當comparator為null時,使用自然排序
-
private transient Entry<K,V> root;
- 紅黑樹的根節點
-
private transient int size = 0;
- 紅黑樹的大小
-
private transient int modCount = 0;
- 結構性修改次數,用於高併發
構造方法
4個構造方法
-
TreeMap()
-
public TreeMap() { comparator = null; }
-
設定
comparator
為null,讓其為自然排序
-
-
TreeMap(Comparator<? super K> comparator)
-
public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; }
-
指定
comparator
, 不是自然排序了
-
-
TreeMap(Map<? extends K, ? extends V> m)
-
public TreeMap(Map<? extends K, ? extends V> m) { comparator = null; putAll(m); }
-
指定一個Map,通過呼叫putAll()方法,讓傳入的Map轉換為TreeMap
-
Map<String, String> test = new LinkedHashMap<>(); //MAP TreeMap<String, String> treeMap = new TreeMap<>(test);
-
-
TreeMap(SortedMap<K, ? extends V> m)
-
public TreeMap(SortedMap<K, ? extends V> m) { comparator = m.comparator(); try { buildFromSorted(m.size(), m.entrySet().iterator(), null, null); } catch (java.io.IOException cannotHappen) { } catch (ClassNotFoundException cannotHappen) { } }
-
當傳入的是
SortedMap
型別時,呼叫相應的buildFromSorted
方法,將SortedMap轉換為TreeMap型別
-
自然排序
一直說到,comparator為null就是自然排序,那自然排序是指什麼?
-
若value是整數的情況,自然排序指的是,(1,2,3,4,5,6,~)
TreeMap<String, Integer> test = new TreeMap<>(); for (int i = 0; i < 10; i++) { test.put("CT-RS" + (int) (Math.random() * 100), (int) (Math.random() * 100)); } for (Map.Entry<String, Integer> entry : test.entrySet()) { System.out.println(entry.getKey() + "-------------->" + entry.getValue()); }
-
預設按照 key 進行自然排序的