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;
        }
    }
  • 相关阅读:
    SVN Windows环境搭建,简洁演示
    SVN-linux配置
    链接文本在a标签内标签里也可以用driver.find_element_by_link_text
    selenium python自动化简明演示
    关键字中mysql数据库查询条件带中文无结果解决办法
    python 最短路径
    python 难度分割
    c语言实现一个高铁乘客管理系统
    Linux(Ubuntu)系统安装图文教程
    字符串排序
  • 原文地址:https://www.cnblogs.com/zhengwenqiang/p/8067948.html
Copyright © 2011-2022 走看看