TreeMap解读

本文深入解读了Java中的TreeMap,基于红黑树的数据结构,介绍了构造器、方法以及内部实现。重点讲解了TreeMap的Entry节点、红黑树操作、构造器底层实现、相关entry与key操作、values操作、迭代器与entrySet操作,以及NavigableSubMap和descendingMap。总结了TreeMap的关键特性,包括有序性、比较器和线程不安全性,并提示可关注红黑树的更多细节。
摘要由CSDN通过智能技术生成

TreeMap解读

引言:

  • TreeMap基于红黑树实现,是有序的key-value集合
  • TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法比如返回有序的key集合。
  • TreeMap 实现了Cloneable接口,意味着它能被克隆
  • TreeMap 实现了java.io.Serializable接口,意味着它支持序列化
  • TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
  • TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
  • TreeMap非同步,即线程不安全,迭代器是fail-fast机制。

一、构造器以及方法

  • 构造器
// 默认构造函数。使用该构造函数,TreeMap中的元素按照自然排序进行排列。
TreeMap()

// 创建的TreeMap包含Map
TreeMap(Map<? extends K, ? extends V> copyFrom)

// 指定Tree的比较器
TreeMap(Comparator<? super K> comparator)

// 创建的TreeMap包含copyFrom
TreeMap(SortedMap<K, ? extends V> copyFrom)
  • 暴露方法
Entry<K, V>                ceilingEntry(K key)
K                          ceilingKey(K key)
void                       clear()
Object                     clone()
Comparator<? super K>      comparator()
boolean                    containsKey(Object key)
NavigableSet<K>            descendingKeySet()
NavigableMap<K, V>         descendingMap()
Set<Entry<K, V>>           entrySet()
Entry<K, V>                firstEntry()
K                          firstKey()
Entry<K, V>                floorEntry(K key)
K                          floorKey(K key)
V                          get(Object key)
NavigableMap<K, V>         headMap(K to, boolean inclusive)
SortedMap<K, V>            headMap(K toExclusive)
Entry<K, V>                higherEntry(K key)
K                          higherKey(K key)
boolean                    isEmpty()
Set<K>                     keySet()
Entry<K, V>                lastEntry()
K                          lastKey()
Entry<K, V>                lowerEntry(K key)
K                          lowerKey(K key)
NavigableSet<K>            navigableKeySet()
Entry<K, V>                pollFirstEntry()
Entry<K, V>                pollLastEntry()
V                          put(K key, V value)
V                          remove(Object key)
int                        size()
SortedMap<K, V>            subMap(K fromInclusive, K toExclusive)
NavigableMap<K, V>         subMap(K from, boolean fromInclusive, K to, boolean toInclusive)
NavigableMap<K, V>         tailMap(K from, boolean inclusive)
SortedMap<K, V>            tailMap(K fromInclusive)

二、继承图

在这里插入图片描述

在代码上的体现为:

java.lang.Object
   ↳     java.util.AbstractMap<K, V>
         ↳     java.util.TreeMap<K, V>

public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable {
   }

由上,得出:

  • TreeMap实现继承于AbstractMap,并且实现了NavigableMap接口
  • TreeMap的本质是R-B Tree(红黑树),它包含几个重要的成员变量: root, size, comparator。
    • root 是红黑数的根节点。它是Entry类型,Entry是红黑数的节点,它包含了红黑数的6个基本组成成分:key(键)、value(值)、left(左孩子)、right(右孩子)、parent(父节点)、color(颜色)。Entry节点根据key进行排序,Entry节点包含的内容为value。 红黑数排序时,根据Entry中的key进行排序;Entry中的key比较大小是根据比较器comparator来进行判断的。size是红黑数中节点的个数。

红黑树的具体实现看我的下一期博文!


三、TreeMap内部结构

先罗列内部数据结构的概况:

  • 核心:红黑树实现
  • 完善:比较器、迭代器、排序方式等等

1、Entry

下面开始从源码解读TreeMap,首先是节点: Entry

 static final class Entry<K,V> implements Map.Entry<K,V> {
   
        K key;
        V value;
        Entry<K,V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值