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 ...
随机推荐
- C# ORM简单原理
对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去. 在今日的企业环境中,把面向对象 ...
- 100天搞定机器学习|Day8 逻辑回归的数学原理
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- On The Way—Step 1 :python入门之Python的历程
1.python的历史 2004 Django框架 python2 和 python3的区别 python2 源码不统一 有重复功能代码 python3 源码统一 没有重复功能代码 Python的发展 ...
- Spring Boot @Condition 注解,组合条件你知道吗
上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties 注解灵活读取配置属性,这篇文 ...
- 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记
自从上次仙人梦里放了一张无字天书,解惑了WPR003N的秘诀后,渐渐的,就忘了这件这事情,连想好的评测都拖延了好多月了,毕竟路由是拿来用的,不是用来写什么陈词滥调的评测的,无意间,热爱白菜的我发现了一 ...
- DVWA-SQL注入
SQL注入解题思路 寻找注入点,可以通过web扫描工具实现 通过注入点,尝试得到连接数据库的用户名,数据库名称,权限等信息. 猜解关键数据库表极其重要字段与内容. 通过获得的用户信息寻找后台进行登录. ...
- Jenkins安装插件问题
最近在电脑尝试安装Jenkins软件 安装插件的时候 一直报错 没有推荐插件提示一直报错 at java.lang.Thread.run(Unknown Source) Caused by: java ...
- web渗透---第二天
协议常识 HTTP协议 百度百科的解释:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. 所有的WWW文件都必须遵守这个标准. ...
- 个人使用的lilypond第一个模板
手残非要用lilypond打谱真是…… 可是lilypond又能满足各种细节标记和谱文混排,这是musescore达不到的 所以还是开这个坑,希望能逐渐自己有能力编写自己的音乐教材 个人用Fresco ...
- 图像反转(一些基本的灰度变换函数)基本原理及Python实现
1. 基本原理 获取像素值在[0, L]范围内的图像的反转图像,即为负片.适用于增强图像中白色或者灰色的区域,尤其当黑色在图片中占主地位时候 $$T(r) = L-r$$ 2. 运行结果 图源自ski ...