TreeMap源码分析
MapClassDiagram
SortedMap
SortedMap提供了对key的排序,key必须是可比较的。两种实现:1、key 实现comparable接口。2、提供comparator.
(1)由于key的有序性,接口定义了一些获取子视图的方法:
subMap,headMap,tailMap,firstKey,lastKey.(都是左开右闭区间)
NavigableMap
(1)继承SortedMap,同样利用key的有序性,提供特定查询。比如:
lowerEntry, floorEntry, ceilingEntry, higherEntry等。
(2)提供了descendingMap。
TreeMap
TreeMap是基于红黑树的实现。在log(n)时间内完成:containsKey,get,put,remove等操作。
(1)B树系列参考
http://www.cnblogs.com/richard-zhouxu/p/B_Tree.html
(2)红黑树介绍参考:
http://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf
(3)如果没有指定comparator, key值不允许为空。(此时使用natural-ording, key implements comparable).
(4)TreeMap.Entry如下:
static final class Entry<K,V> implements Map.Entry<K,V> {
K key;
V value;
Entry<K,V> left = null;
Entry<K,V> right = null;
Entry<K,V> parent;
boolean color = BLACK;
/**
* Make a new cell with given key, value, and parent, and with
* <tt>null</tt> child links, and BLACK color.
*/
Entry(K key, V value, Entry<K,V> parent) {
this.key = key;
this.value = value;
this.parent = parent;
}
(5)private transient KeySet<K> navigableKeySet = null;
可以有序迭代key, 并通过key来获取相应的value。
(6)descendingMap,descendingKeySet,descendingKeyIterator等方式进行反向访问。
DescendingSubMap内部类中使用Collections.reverseOrder(m.comparator);来反转比较器。
(7)其它具体的操作参见Red-BlackTree
TreeMap源码分析的更多相关文章
- Java集合之TreeMap源码分析
		一.概述 TreeMap是基于红黑树实现的.由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的C ... 
- HashMap与TreeMap源码分析
		1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ... 
- TreeMap 源码分析
		简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现.TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey.get.p ... 
- TreeMap源码分析,看了都说好
		概述 TreeMap也是Map接口的实现类,它最大的特点是迭代有序,默认是按照key值升序迭代(当然也可以设置成降序).在前面的文章中讲过LinkedHashMap也是迭代有序的,不过是按插入顺序或访 ... 
- 死磕 java集合之TreeMap源码分析(四)-内含彩蛋
		欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 二叉树的遍历 我们知道二叉查找树的遍历有前序遍历.中序遍历.后序遍历. (1)前序遍历,先遍历 ... 
- 死磕 java集合之TreeMap源码分析(三)- 内含红黑树分析全过程
		欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则. (1)如果删除的位置有两个叶子节点 ... 
- 死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程
		欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 插入元素 插入元素,如果元素在树中存在,则替换value:如果元素不存在,则插入到对应的位置, ... 
- 死磕 java集合之TreeMap源码分析(一)- 内含红黑树分析全过程
		欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历. 继承体系 Tr ... 
- java.util.TreeMap源码分析
		TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器. 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n ... 
随机推荐
- CSS 图片倾斜的制作
			<style> #zhong{ height:600px; width:1350px; position:relative; z-index:2} .znei{ height:60px; ... 
- position与z-index的关系
			.simulationgame .gameranking .rankinginfo{ width:140px; margin:0 auto; font-family:Arial, Microsoft ... 
- oracle分组后取每组第一条数据
			数据格式: 分组取第一条的效果: sql语句: SELECT * FROM ( ; 
- database link远程链接数据库
			--授权创建.删除dblink GRANT CREATE [PUBLIC] DATABASE LINK,DROP [PUBLIC] DATABASE LINK TO canco; --查看数据库GLO ... 
- UIAlertViewController的使用
			UIAlertViewController是苹果自带的信息提示框,仅在iOS8.0以后可以使用 NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertContro ... 
- 一个MVC架构的线程安全的银行转账案例(事务控制)
			mvc结构: 准备阶段:jar包 ,dbcpconfig.propertie(数据源配置文件 ) ,DBCPUtil. jar包: dbcp配置文件: driverClassName=com.mysq ... 
- Android进程间的通信之Messenger
			Android进程间的通信方式可以通过以下两种方式完成: Android接口定义语言(AIDL) 使用Messenger绑定服务 本文我们将学习使用Messenger绑定服务的方式进行进程间的通信. ... 
- Haproxy+Keepalived高可用负载均衡详细配置
			本文所使用的环境: 10.6.2.128 centos6.5 10.6.2.129 centos6.5 VIP 为10.6.2.150 要实现的目标: 实现10.6.2.128和10.6 ... 
- (转)selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别
			selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ... 
- DIV+CSS常用的网页布局代码
			单行一列以下是引用片段:body { margin: 0px; padding: 0px; text-align: center; }#content { margin-left:auto; marg ... 
