Java-API简析_java.util.TreeMap<K,V>类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131898705
出自【进步*于辰的博客

1、概述

继承关系:

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

所有已实现的接口:
Serializable, Cloneable, Map<K,V>, SortedMap<K,V>


public class TreeMap<K,V> extends AbstractMap<K,V> implements SortedMap<K,V>, Cloneable, Serializable

SortedMap 接口的基于 红黑树 红黑树 红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的 自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。

此实现为 containsKey()get()put()remove() 操作提供了保证的 log(n) 时间开销。这些算法是 Cormen、Leiserson 和 Rivest 的《Introduction to Algorithms》中的算法的改编。

注意,如果有序映射要正确实现 Map 接口,则有序映射所保持的顺序(无论是否明确提供比较器)都必须保持与等号一致。(请参见与 等号一致 的精确定义的 Comparable 或 Comparator。)这也是因为 Map 接口是按照等号操作定义的,但映射使用它的 compareTo()(或 compare())对所有键进行比较,因此从有序映射的观点来看,此方法认为相等的两个键就是相等的。即使顺序与等号不一致,有序映射的行为仍然是定义良好的;只不过没有遵守 Map 接口的常规约定。

注意,此实现不是同步的。如果多个线程同时访问一个映射,并且其中至少一个线程从结构上修改了该映射,则其必须保持外部同步。(结构上修改是指添加或删除一个或多个映射关系的操作;仅改变与现有键关联的值不是结构上的修改。)这一般通过对自然封装该映射的某个对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap() 来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:

Map m = Collections.synchronizedMap(new TreeMap(...));

由所有此类的“collection 视图方法”所返回的迭代器都是 快速失败 的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove()add() ,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。

此类是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Map, HashMap, Hashtable, Comparable, Comparator, Collection, Collections.synchronizedMap(Map), 序列化表格

2、构造方法摘要

2.1 null

构造一个新的空映射,该映射按照键的自然顺序排序。

2.2 Comparator<? super K> c

构造一个新的空映射,该映射根据给定的比较器进行排序。

2.3 Map<? extends K,? extends V> m

构造一个新映射,包含的映射关系与给定的映射相同,这个新映射按照键的自然顺序 进行排序。

2.4 SortedMap<K,? extends V> m

构造一个新的映射,包含的映射关系与给定的 SortedMap 相同,该映射按照相同的排序方式进行排序。

3、方法摘要

3.1 void clear()

从此 TreeMap 中删除所有映射关系。

3.2 Object clone()

返回 TreeMap 实例的浅表复制。

3.3 Comparator<? super K> comparator()

返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回 null。

3.4 boolean containsKey(Object key)

如果此映射包含对于指定的键的映射关系,则返回 true。

3.5 boolean containsValue(Object value)

如果此映射把一个或多个键映射到指定值,则返回 true。

3.6 Set<Map.Entry<K,V>> entrySet()

返回此映射所包含的映射关系的 set 视图。

3.7 K firstKey()

返回有序映射中当前第一个(最小的)键。

3.8 V get(Object key)

返回此映射中映射到指定键的值。

3.9 SortedMap<K,V> headMap(K toKey)

返回此映射的部分视图,其键严格小于 toKey

3.10 Set<K> keySet()

返回此映射中所包含的键的 Set 视图。

3.11 K lastKey()

返回有序映射中当前最后一个(最大的)键。

3.12 V put(K key, V value)

在此映射中关联指定值与指定键。

3.13 void putAll(Map<? extends K,? extends V> map)

将指定映射中所有映射关系复制到此映射中。

3.14 V remove(Object key)

如果此 TreeMap 中存在该键的映射关系,则将其移除。

3.15 int size()

返回此映射中的键-值映射关系数。

3.16 SortedMap<K,V> subMap(K fromKey, K toKey)

返回此映射的部分视图,其键值从 fromKey(包括)到 toKey(不包括)。

3.17 SortedMap<K,V> tailMap(K fromKey)

返回映射的部分视图,其键大于或等于 fromKey

3.18 Collection<V> values()

返回此 Map 中所包含的值的 collection 视图。


本文暂缓更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

谢谢打赏!!很高兴可以帮到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值