TreeMap

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 进行自然排序的

原文地址:https://www.cnblogs.com/JQ04/p/15124436.html