看看文档,写点东西。。。
今天才发现原来源代码可以直接进入debugger 调试模式。真是厉害的发现,哈哈哈。
===================================================================
下面会从两个方面来分析TreeMap。
--- jdk文档(我用的是jdk1.7中文)来理论说明什么是TreeMap,TreeMap的特性。
--- 通过源代码(jdk1.8)来调试一个示例,看看TreeMap 的put,get方法的整体数据流向。
文档解释阶段:
1、 什么是TreeMap?
基于红黑树的可排序的map实现。 两个关键词: 红黑树,可排序。 红黑树是二叉树的一种。后续再去了解。
另外一个关键词 可排序,顾名思义 就是可以按照自己定义的规则来给元素排顺序。
2、宏观了解一下TeeMap主要的继承关系。
TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
public interface NavigableMap<K,V> extends SortedMap<K,V> {
public interface SortedMap<K,V> extends Map<K,V> {
这个就是TreeMap的全部继承或接口关系。其中:NavigableMap 提供了截取Map视图的方法;
SortedMap<K,V> 提供了 排序的方法。 Map<> 提供了最基本方法。具体方法如下:
==========================================================
3、关于排序问题:
是一个关于键的整体排序, 是对key的排序。而不是value。 排序有两种实现方式:
a、键的《自然排序》来进行排序 ------ 插入有序映射的所有键都必须实现 Comparable 接口 ,然后通过 k1.compareTo(k2)这样的方法来比较。
b。创建TreeMap时,指定比较器 Compatator 来进行比较排序。
所有TreeMap都提供了4个标准的构造方法:
1) void(无参数)构造方法,它创建一个空的有序映射,按照键的自然顺序进行排序。
2) 带有一个 Comparator 类型参数的构造方法,它创建一个空的有序映射,根据指定的比较器进行排序。
3) 带有一个 Map 类型参数的构造方法,它创建一个新的有序映射,其键-值映射关系与参数相同,按照键的自然顺序进行排序。
4) 带有一个 SortedMap 类型参数的构造方法,它创建一个新的有序映射,其键-值映射关系和排序方法与输入的有序映射相同。无法保证强制实施此建议,因为接口不能包含构造方法。
====================================================================
put ,get 方法的实现涉及到了红黑树的增加节点,和获取节点操作。 这里我先不进一步了解红黑树。 另外本来想把示例的调试过程 贴出来, 现在变得不用了。
下面这篇博文我感觉写的可以,下次再忘记的话就直接看这篇博文吧。 通过红黑树详解TreeMap
强烈给自己的建议: 给源码断点调试,通过数据流向更能理解源码意图。
=======================================================
红黑树真恶心。