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源码分析的更多相关文章

  1. Java集合之TreeMap源码分析

    一.概述 TreeMap是基于红黑树实现的.由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的C ...

  2. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  3. TreeMap 源码分析

    简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现.TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey.get.p ...

  4. TreeMap源码分析,看了都说好

    概述 TreeMap也是Map接口的实现类,它最大的特点是迭代有序,默认是按照key值升序迭代(当然也可以设置成降序).在前面的文章中讲过LinkedHashMap也是迭代有序的,不过是按插入顺序或访 ...

  5. 死磕 java集合之TreeMap源码分析(四)-内含彩蛋

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 二叉树的遍历 我们知道二叉查找树的遍历有前序遍历.中序遍历.后序遍历. (1)前序遍历,先遍历 ...

  6. 死磕 java集合之TreeMap源码分析(三)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则. (1)如果删除的位置有两个叶子节点 ...

  7. 死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 插入元素 插入元素,如果元素在树中存在,则替换value:如果元素不存在,则插入到对应的位置, ...

  8. 死磕 java集合之TreeMap源码分析(一)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历. 继承体系 Tr ...

  9. java.util.TreeMap源码分析

    TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器. 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n ...

随机推荐

  1. 二、innerHTML应用测试

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>inne ...

  2. OAuth 2.0 Threat Model and Security Considerations (rfc6819)

    Authorization server The following data elements are stored or accessible on the authorization serve ...

  3. Linux中多线程信号的处理

    1. 博文:Linux多线程中使用信号-1  http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结  ...

  4. CentOS 6.5 下离线安装nginx

    一.由于linux下安装nginx 需要  zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc这些依赖,而这些依赖打安装包在我们系统的光 ...

  5. HTML实体符号代码速查表

    1.特色的 © © © 版权标志 |   | 竖线,常用作菜单或导航中的分隔符 · · · 圆点,有时被用来作为菜单分隔符 ↑ ↑ ↑ 上箭头,常用作网页“返回页面顶部”标识 € € € 欧元标识 ² ...

  6. ELK日志管理之——logstash配置语法

    Logstash 设计了自己的 DSL -- 有点像 Puppet 的 DSL,或许因为都是用 Ruby 语言写的吧 -- 包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字 ...

  7. JSON 的应用

    使用  JSON 需要的 jar 包:

  8. 1.jenkins持续集成-jenkins安装

    1.为什们要使用jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目; 2.监控外部调用执行的工作. 2.安装jen ...

  9. 记录Qt的一个诡异Bug

    公司的一款项目,在迭代开发阶段,突然发现运行速度越来越慢,界面切换卡顿时间在2秒以上.经过和某个不卡版本的对比,惊奇的发现程序二进制都一模一样,就几个图片资源和脚本不一样.经过差不多一天的排查,发现是 ...

  10. 哈哈,修改PHP5.4.44语法成功

    作为一个脚本语言,面向对象的继承基本上不想用到,强类型比较也想使用==直接比较.作为专业程序员不想让PHP解释器代劳过多. 修改了这个MOD版本,效果杠杠的.