zoukankan      html  css  js  c++  java
  • TreeMap源码

    一、TreeMap简介

    TreeMap是基于红黑树的java版实现,作者Josh Bloch and Doug Lea(这二人在java发展的早期做了重大贡献,比如集合框架JDK1.2、并发包JDK1.5)

    TreeMap使用了比较排序来维护元素大小顺序

    二、排序方式

    1.TreeMap排序方式  

    这个map的keys的排序要让元素实现接口Comparable从而自然排序 或者在实例化map时向构造方法传入一个Comparator从而定制排序

    2.自然排序

    元素实现Comparable接口。将POJO类和比较方法compareTo(Object obj)写在一个类中

    3.定制排序

    自定义Comparator接口的实现类,作为比较元素大小的比较器。将比较方法compare(e1,e2)写在单独的类中。

    4.与equals关系

    对元素大小排序时,compareTo (E e)、compare(E e1,E e2) 这两个方法的比较结果要与equals在逻辑上一致,避免在使用HashMap时产生冲突。

    三、源码解读

    public class TreeMap<K,V>
        extends AbstractMap<K,V>
        implements NavigableMap<K,V>, Cloneable, java.io.Serializable
    {
        /**
         * 这个比较器用来维护treeMap的顺序,当自然排序时可以为null
         */
        private final Comparator<? super K> comparator;
    
        private transient Entry<K,V> root = null;
    
        /**
         * tree中entries的数量
         */
        private transient int size = 0;
    
        /**
         * 对tree进行结构化修改的次数
         */
        private transient int modCount = 0;
    
        /**
         使用自然排序来构建一个新的、空参的treeMap,所有被插入的keys必须实现Comparable接口,
         必须是可以互相比较的,使用compareTo不能抛出ClassCastException.
         如果用户放入一个违法约束的key,这个类的put方法将会抛出ClassCastException异常。
         */
        public TreeMap() {
            comparator = null;
        }
    
        /**
         * 使用定制排序来构建一个新的、空参的treeMap,keys用给定的comparator时必须是可以比较的,
          不能抛出ClassCastException.如果用户放入一个违法约束的key,这个类的put方法将会抛出ClassCastException异常。
          参数comparator如果为null,还是会使用自然排序
    
         */
        public TreeMap(Comparator<? super K> comparator) {
            this.comparator = comparator;
        }
    }
  • 相关阅读:
    axios跨域问题(包括开发环境和生产环境)
    vue高亮一级、二级导航
    vue配置路由时报错 Error in render: "RangeError: Maximum call stack size exceeded"
    win10使用L2TP连接失败,报远程服务器未响应错误解决办法,亲测可用!
    pywinauto教程
    Python结合Pywinauto 进行 Windows UI 自动化
    Pywinauto自动化操作PC微信提取好友微信号
    Debian9 配置kali(xfce4、Metasploit、wireshark)
    Kali开启ssh
    从域环境搭建到域渗透
  • 原文地址:https://www.cnblogs.com/zhengwenqiang/p/8067948.html
Copyright © 2011-2022 走看看