zoukankan      html  css  js  c++  java
  • 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 进行自然排序的

  • 相关阅读:
    模板元编程实现素数判定
    JDBC开发
    4.9 当相应行存在时更新
    QT5中如何使用QFtp类(这个类虽然没有被收录,但一直在更新)
    gcc和g++的区别
    Awesome C/C++(图像部分)
    Ubuntu更新源
    GO的GDB调试
    内核探测工具systemtap简介
    列举一下项目中使用的产品和技术
  • 原文地址:https://www.cnblogs.com/JQ04/p/15124436.html
Copyright © 2011-2022 走看看