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

  • 相关阅读:
    NSIS制作安装程序
    poj_1011木棒
    hdoj_1312Red and Black
    搜索题目推荐及解题报告
    应届生就职前要读的几本书
    poj_1564Sum It Up
    priority_queue用法
    hdoj_2952Counting Sheep
    poj_1154LETTERS
    poj_2362
  • 原文地址:https://www.cnblogs.com/JQ04/p/15124436.html
Copyright © 2020-2023  润新知