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

  • 相关阅读:
    结对项目 sport club(一)
    结对项目 sport club(三)
    结对项目 sport club(二)
    博客作业
    学生信息管理系统APP需求分析
    随机生成四则运算
    软件介绍
    利用纯css写三角形,弧度箭头,吃豆人,气泡。放大镜,标签的源码
    js中的数据类型隐式转换的三种情况
    javascript基础入门之js中的结构分支与循环语句
  • 原文地址:https://www.cnblogs.com/JQ04/p/15124436.html
Copyright © 2011-2022 走看看