1. 程式人生 > 資訊 >流心奶黃:知味觀月餅 2 枚 9.9 元狂促(立減 10 元)

流心奶黃:知味觀月餅 2 枚 9.9 元狂促(立減 10 元)

TreeMap

前言

  1. TreeMap實現了NavigableMap介面,並且NavigableMap繼承SortedMap介面,所以TreeMap介面是有序的
  2. 底層實現是紅黑樹,方法的時間複雜度不高,log(n)
  3. 非同步的
  4. 解決相等問題排序問題,使用Comparator或者Comparable介面比較

  1. private final Comparator<? super K> comparator;
    
    1. 當comparator為null時,使用自然排序
  2. private transient Entry<K,V> root;
    
    1. 紅黑樹的根節點
  3. private transient int size = 0;
    
    1. 紅黑樹的大小
  4. private transient int modCount = 0;
    
    1. 結構性修改次數,用於高併發

構造方法

4個構造方法

  1. TreeMap()

    1. public TreeMap() {
          comparator = null;
      }
      
    2. 設定 comparator 為null,讓其為自然排序

  2. TreeMap(Comparator<? super K> comparator)

    1. public TreeMap(Comparator<? super K> comparator) {
          this.comparator = comparator;
      }
      
    2. 指定 comparator, 不是自然排序了

  3. TreeMap(Map<? extends K, ? extends V> m)

    1. public TreeMap(Map<? extends K, ? extends V> m) {
          comparator = null;
          putAll(m);
      }
      
    2. 指定一個Map,通過呼叫putAll()方法,讓傳入的Map轉換為TreeMap

    3. Map<String, String> test = new LinkedHashMap<>(); //MAP
      TreeMap<String, String> treeMap = new TreeMap<>(test);
      
  4. TreeMap(SortedMap<K, ? extends V> m)

    1. 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) {
          }
      }
      
    2. 當傳入的是SortedMap型別時,呼叫相應的buildFromSorted方法,將SortedMap轉換為TreeMap型別

自然排序

一直說到,comparator為null就是自然排序,那自然排序是指什麼?

  1. 若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());
    }
    
  2. 預設按照 key 進行自然排序的