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;
}
}
TreeMap源码的更多相关文章
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- TreeMap源码解析
1.TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合. TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了Navig ...
- 转:【Java集合源码剖析】TreeMap源码剖析
前言 本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的时间和经历,目前看来不大可能有这么多时间的投入,故这里意在通过于阅读源码对 ...
- 结合java.util.TreeMap源码理解红黑树
前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...
- TreeMap 源码分析
简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现.TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey.get.p ...
- Java数据结构和算法 - TreeMap源码理解红黑树
前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...
- Java集合之TreeMap源码分析
一.概述 TreeMap是基于红黑树实现的.由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的C ...
- Java - TreeMap源码解析 + 红黑树
Java提高篇(二七)-----TreeMap TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap ...
- TreeMap源码分析,看了都说好
概述 TreeMap也是Map接口的实现类,它最大的特点是迭代有序,默认是按照key值升序迭代(当然也可以设置成降序).在前面的文章中讲过LinkedHashMap也是迭代有序的,不过是按插入顺序或访 ...
- 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析
TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解. 要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...
随机推荐
- ionic3中 ion-datetime 全屏可点击问题解决方案
废话不多说,能进来的都应该知道是个什么情况.我也是在网上找了一段时间,才在git上ionic官方团队的Issues中找到了问题解决方法. 第一,给外围包上一层ion-item,但是这有个问题,就是会让 ...
- ABAP中的AMDP(ABAP-Managed Database Procedures )
ABAP管理下的数据库存储过程(ABAP-Managed Database Procedure,以下简称AMDP)是在APAP on SAP HANA开发中的一种优化模式.AMDP使用数据库语言书写, ...
- cinder块存储控制节点
#cinder块存储控制节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder块存储控制节点 #在控制 ...
- CCF-201312-4-有趣的数
问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...
- APP端的网络优化(DNS优化,HTTP优化)
一.使用httpDNS优化DNS解析和缓存 一般来说在App内用域名发送请求都要经过DNS解析出ip,然后再根据ip去拿对应的资源,这个过程中,如果LocalDNS中存在这个域名对应的ip,就会直接返 ...
- WPF依赖对象(DependencyObject) 实现源码,理解WPF原理必读
/// DependencyObject encompasses all property engine services. It's primary function /// is providin ...
- 使用邮件激活授权/ LightningChart license
在无网络连接的情况下,可以采用邮件的方式激活授权. 先打开License Manager,然后选 Activate/Deactivate via email, 如下图所示: 此邮件将自动发送到 lic ...
- js onmouseover与onmouseout用法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 转自知乎-wifi破解
上点python有意思的代码. 环境准备 python2.7 pywifi模块 字典 清除系统中的任何wifi连接记录 导入模块 这里用的模块就这三个 pywifi的_wifiutil_linux.p ...
- SQL或HQL预编译语句,可以防止SQL注入,可是不能处理%和_特殊字符
近期项目在做整改,将全部DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式.个人通过写dao层的单元測试,有下面几点收获. dao层代码例如以下 //使用了预编译sql public L ...