- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaTreeMap源码解析
Java TreeMap 源码解析
继 HYPERLINK /article/java-hashmap-java-collection.html \t _blank 上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类 HYPERLINK /javase/7/docs/api/index.html?java/util/TreeMap.html \t _blank TreeMap。 大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较多;二是相对于HashMap来说,TreeMap所用到的数据结构更为复杂。 废话不多说,进入正题。
签名(signature)
public class TreeMapK,V?????? extends AbstractMapK,V?????? implements NavigableMapK,V, Cloneable, java.io.Serializable
可以看到,相比HashMap来说,TreeMap多继承了一个接口 HYPERLINK /javase/7/docs/api/java/util/NavigableMap.html \t _blank NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同:
HashMap的key是无序的,TreeMap的key是有序的
接口NavigableMap
首先看下NavigableMap的签名
public interface NavigableMapK,V extends SortedMapK,V
发现NavigableMap继承了SortedMap,再看SortedMap的签名
SortedMap
public interface SortedMapK,V extends MapK,V
SortedMap就像其名字那样,说明这个Map是有序的。这个顺序一般是指由 HYPERLINK /javase/7/docs/api/java/lang/Comparable.html \t _blank Comparable接口提供的keys的自然序(natural ordering),或者也可以在创建SortedMap实例时,指定一个 HYPERLINK /javase/7/docs/api/java/util/Comparator.html \t _blank Comparator来 决定。 当我们在用集合视角(collection views,与HashMap一样,也是由entrySet、keySet与values方法提供)来迭代(iterate)一个SortedMap实例 时会体现出key的顺序。 这里引申下关于Comparable与Comparator的区别(参考 HYPERLINK /a/4108616/2163429 \t _blank 这里):
Comparable一般表示类的自然序,比如定义一个Student类,学号为默认排序
Comparator一般表示类在某种场合下的特殊分类,需要定制化排序。比如现在想按照Student类的age来排序
插入SortedMap中的key的类类都必须继承Comparable类(或指定一个comparator),这样才能确定如何比较(通过pareTo(k2)或pare(k1, k2))两个key,否则,在插入时,会报ClassCastException的异常。 此为,SortedMap中key的顺序性应该与equals方法保持一致。也就是说pareTo(k2)或pare(k1, k2)为true时,k1.equals(k2)也 应该为true。 介绍完了SortedMap,再来回到我们的NavigableMap上面来。 NavigableMap是JDK1.6新增的,在SortedMap的基础上,增加了一些“导航方法”(navigation methods)来返回与搜索目标最近的元素。例如下面这些方法:
lowerEntry,返回所有比给定Map.Entry小的元素
floorEntry,返回所有比给定Map.Entry小或相等的元素
ceilingEntry,返回所有比给定Map.Entry大或相等的元素
higherEntry,返回所有比给定Map.Entry大的元素
设计理念(design concept)
HYPERLINK /wiki/Red%E2%80%93black_tree \t _blank 红黑树(Red–black tree)
TreeMap是用红黑树作为基础实现的,红黑树是一种 HYPER
文档评论(0)