Java集合框架之TreeMap浅析
Java集合框架之TreeMap浅析
一、TreeMap综述:
TreeMap在Map中的结构如下:
TreeMap 实现了 SortedMap 和 NavigableMap 接口,所有本文还会记录 SortedMap 和 NavigableMap 的阅读笔记。
SortedMap
1. 排序的比较应该和 equals(Object) 保持一致
2. 应该提供四种“标准”的构造器
1). 无参构造器
2). 带一个 Comparator 为参数的构造器
3). 带一个 Map 为参数的构造器
4). 带一个 SortedMap 为参数的构造器
3. subMap , headMap , tailMap , KeySet , values, entrySet 等方法返回的 Map 或 Set 和 SortedMap 本身使用同一份数据,所以对 subMap 返回的 Map 进行修改,同样会反映到 SortedMap 上。
NavigableMap
1. lowerEntry, floorEntry, ceilingEntry, higherEntry 分别返回 小于、小于或等于,大于或等于,以及大于给定 key 的 Map.Entry。这类型的方法用于定位离目标给定值最近的元素。
2. 增长序 map 的操作比递减序的 map 的操作要快。
3. 返回 entry 的方法返回的是那一刻的 entry 快照,所以通常不支持 Entry.setValue 方法。
例如, TreeMap 实现 NavigableMap 的 firstEntry,返回会的就是根据给定 entry 的 key, value 新建的不可变
SimpleImmutableEntry 对象。
4. pollFirstEntry 删除并返回第一个元素
TreeMap
1. 基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
2. 根据自然序,或者给定的比较器是内部元素保持有序。
3. 提供复杂度为 log(n) 的 containsKey, get, put, remove 操作
4. itertator 采用 fast-fail 机制
5. values 继承于 Collection, EntrySet 和 KeySet 则继承于 Set
6. DeletionEntry 删除指定的元素,fixAfterDeletion 对删除后的树节点进行再平衡,使得 TreeMap 保持红黑树的特性。
二、TreeMap方法摘要:
| 构造方法摘要 | |
|---|---|
TreeMap() 使用键的自然顺序构造一个新的、空的树映射。 |
|
TreeMap(Comparator<? super K> comparator)构造一个新的、空的树映射,该映射根据给定比较器进行排序。 |
|
TreeMap(Map<? extends K,? extends V> m)构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序。 |
|
TreeMap(SortedMap<K,? extends V> m)构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射。 |
|
| 方法摘要 | |
|---|---|
Map.Entry<K,V> |
ceilingEntry(K key)返回一个键-值映射关系,它与大于等于给定键的最小键关联;如果不存在这样的键,则返回 null。 |
K |
ceilingKey(K key)返回大于等于给定键的最小键;如果不存在这样的键,则返回 null。 |
void |
clear()从此映射中移除所有映射关系。 |
Object |
clone()返回此 TreeMap 实例的浅表副本。 |
Comparator<? super K> |
comparator()返回对此映射中的键进行排序的比较器;如果此映射使用键的自然顺序,则返回 null。 |
boolean |
containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true。 |
boolean |
containsValue(Object value)如果此映射为指定值映射一个或多个键,则返回 true。 |
NavigableSet<K> |
descendingKeySet()返回此映射中所包含键的逆序 NavigableSet视图。 |
NavigableMap<K,V> |
descendingMap()返回此映射中所包含映射关系的逆序视图。 |
Set<Map.Entry<K,V>> |
entrySet()返回此映射中包含的映射关系的 Set 视图。 |
Map.Entry<K,V> |
firstEntry()返回一个与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。 |
K |
firstKey()返回此映射中当前第一个(最低)键。 |
Map.Entry<K,V> |
floorEntry(K key)返回一个键-值映射关系,它与小于等于给定键的最大键关联;如果不存在这样的键,则返回 null。 |
K |
floorKey(K key)返回小于等于给定键的最大键;如果不存在这样的键,则返回 null。 |
V |
get(Object key)返回指定键所映射的值,如果对于该键而言,此映射不包含任何映射关系,则返回 null。 |
SortedMap<K,V> |
headMap(K toKey)返回此映射的部分视图,其键值严格小于 toKey。 |
NavigableMap<K,V> |
headMap(K toKey, 返回此映射的部分视图,其键小于(或等于,如果 inclusive 为 true)toKey。 |
Map.Entry<K,V> |
higherEntry(K key)返回一个键-值映射关系,它与严格大于给定键的最小键关联;如果不存在这样的键,则返回 null。 |
K |
higherKey(K key)返回严格大于给定键的最小键;如果不存在这样的键,则返回 null。 |
Set<K> |
keySet()返回此映射包含的键的 Set 视图。 |
Map.Entry<K,V> |
lastEntry()返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null。 |
K |
lastKey()返回映射中当前最后一个(最高)键。 |
Map.Entry<K,V> |
lowerEntry(K key)返回一个键-值映射关系,它与严格小于给定键的最大键关联;如果不存在这样的键,则返回 null。 |
K |
lowerKey(K key)返回严格小于给定键的最大键;如果不存在这样的键,则返回 null。 |
NavigableSet<K> |
navigableKeySet()返回此映射中所包含键的 NavigableSet视图。 |
Map.Entry<K,V> |
pollFirstEntry()移除并返回与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。 |
Map.Entry<K,V> |
pollLastEntry()移除并返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null。 |
V |
put(K key, V value)将指定值与此映射中的指定键进行关联。 |
void |
putAll(Map<? extends K,? extends V> map)将指定映射中的所有映射关系复制到此映射中。 |
V |
remove(Object key)如果此 TreeMap 中存在该键的映射关系,则将其删除。 |
int |
size()返回此映射中的键-值映射关系数。 |
NavigableMap<K,V> |
subMap(K fromKey,返回此映射的部分视图,其键的范围从 fromKey 到toKey。 |
SortedMap<K,V> |
subMap(K fromKey, K toKey)返回此映射的部分视图,其键值的范围从 fromKey(包括)到 toKey(不包括)。 |
SortedMap<K,V> |
tailMap(K fromKey)返回此映射的部分视图,其键大于等于 fromKey。 |
NavigableMap<K,V> |
tailMap(K fromKey, 返回此映射的部分视图,其键大于(或等于,如果 inclusive 为 true)fromKey。 |
Collection<V> |
values()返回此映射包含的值的 Collection 视图。 |
参考文章:https://www.cnblogs.com/TonyYPZhang/p/5747850.html
Java集合框架之TreeMap浅析的更多相关文章
- Java集合框架之TreeSet浅析
Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...
- Java集合框架之HashMap浅析
Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...
- Java集合框架之HashSet浅析
Java集合框架之HashSet浅析 一.HashSet综述: 1.1HashSet简介 位于java.util包下的HashSet是Java集合框架的重要成员,它在jdk1.8中定义如下: publ ...
- Java集合框架之Vector浅析
Java集合框架之Vector浅析 一.Vector概述: 位于java.util包下的Vector是Java集合框架的重要一员,虽然没有ArrayList那么的常用,但是我们还要对其做相关学习: 1 ...
- Java集合框架之LinkedList浅析
Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...
- Java集合框架之ArrayList浅析
Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...
- Java集合框架系列大纲
###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...
随机推荐
- python课堂整理17---文件操作(上)
1.在同一目录下新建文本文件 “爱了” 2.在该文件下写入内容,同时留意pycharm右下角的编码格式为 utf- 8 3.下面程序中的read函数会索引系统默认的编码格式,winx下是gbk ,所以 ...
- gawk(awk)的用法案例
gawk(awk)的用法案例 本文首先简单介绍一个gawk和awk的区别,然后是一点基本使用流程,最后是自己做的一个分析数据文件的脚本代码,供大家参考.另外想了解基本流程的入门知识的可以下载附件pdf ...
- storm trident 的介绍与使用
一.trident 的介绍 trident 的英文意思是三叉戟,在这里我的理解是因为之前我们通过之前的学习topology spout bolt 去处理数据是没有问题的,但trident 的对spou ...
- 【杂谈】Hash表与平衡树
hash表与平衡树查询数据的时间复杂度是多少? hash表为O(1),平衡树为O(logn) 这个时间复杂度是如何得出的? 时间复杂度是按照最糟糕的情况来的.但即使是最糟糕的情况,hash表也只需要计 ...
- java并发笔记之java线程模型
警告⚠️:本文耗时很长,先做好心理准备 java当中的线程和操作系统的线程是什么关系? 猜想: java thread —-对应-—> OS thread Linux关于操作系统的线程控制源码: ...
- 基于V2EX API的nodejs组件.
今天又学习到了新的知(zi)识(shi),来给自己做个笔录,也算在这酷热的天气里给自己写了一篇降温的‘膏药’,话就讲这么多了 ,start off...... 首先 ,依赖选择: /**设置为严格模式 ...
- IOS应用无法下载、此时无法安装应用程序
无法安装应用 app开发者,进行程序测试,重试还不行,就重新打包, 个人,更改wifi的dns 在“设置” –> “WiFi” –> 进入当前的WiFi 进入之后点击旁边的叹号,然后进入之 ...
- golang文档、中文、学习文档
Golang中文文档地址 http://zh-golang.appspot.com/doc/ Golang非英文文档地址: https://github.com/golang/go/wiki/NonE ...
- nginx基本运维及常用配置
nginx基本运维及常用配置 ========================================================== 基本运维 nginx 的启动 nginx -c /p ...
- 有趣的RPC理解
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通 ...