treemap怎么保证有序_Java集合框架—TreeMap—源码研读

前言:

在上一篇文章:Java集合框架—LinkedHashMap—源码研读 中,我们深入学习了LinkedHashMap,现在,让我们开始学习更进阶一点的内容——TreeMap。学习TreeMap前,最好需要先了解一下比较器Comparat、二叉排序树、红黑树据结构的知识。

所以此篇文章,分为3个部分:

1.比较器Comparator和Comparable接口

2.红黑树和二叉排序树

3.红黑树的左旋和右旋

4.TreeMap的源码分析-put()方法、fixAfterInsertion()解读


1.比较器Comparator和Comparable接口

首先,HashMap中的键值对是无序的,LinkedHashMap的出现使得键值对可以按照插入顺序被遍历,但是有很多场景下,我需要根据插入其中的键值对中的key来进行排序,而不是简单的根据插入顺序。那么此时LinkedHashMap便无能为力了!这时,TreeMap就派上了用场,因为TreeMap天生就实现了SortedMap接口,而SortedMap是为了排序而存在的。

让我们先看一下Map接口的关系图和TreeMap的类关系图:

897e70ea83ff66099e454efe31e19c48.png
8aa026a83369f9786168b305e34650a7.png

可见:TreeMap继承自AbstractMap,实现了NavigableMap、Cloneable和Serializable接口。

其中有一点需要注意,NavigableMap继承自SortedMap,而SortedMap接口就是TreeMap中对象有序的核心。

SortedMap接口是干嘛的?简单来说SortedMap接口中包含Comparator比较器,可以自定义比较方法用于实现key的比较。即实现SortedMap的类,其中的对象即可根据比较器中定义的方法,对key进行排序从而达到类中对象有序的目的。

目前java中SortedMap接口的实现类只有TreeMap。如果对Comparable和Comparator还不太熟悉,可以看看下面的内容,否则可以pass掉。

Comparable 和 Comparator的区别:

首先,Comparable和Comparator都是用于比较的接口,全名:java.lang.Comparable 和 java.util.Comparator

Comparable接口主要用于自然比较,里面只有一个方法:public int compareTo(T o);

Integer、String都实现了Comparable接口并实现了接口中的compareTo方法,Integer中的compareTo方法如下:

public int compareTo(Integer anotherInteger) {        ret
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值