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 单链表 实现约瑟夫环
list.h #ifndef _List_H #define _List_H typedef int ElementType; struct Node; typedef struct Node *Pt ...
- Python学习6——再谈抽象(面对对象编程)
1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...
- 50 行 Python 代码,带你追到女神
今天来给大家分享一个撩妹技巧,利用 python 每天给你最心爱的人,发送微信消息,说声晚安. 废话不多说,源代码奉上 def get_news(): ... url = "http://o ...
- ThreadPoolExecutor带来的性能问题
使用线程池,一般情况下会带来性能提升,并且使用线程池管理线程,减少了每个任务调用的开销,通常可以在执行大量异步任务时提供增强的性能. 但是在高并发的情况下,会因为使用不当导致性能下降,并且下降得比较严 ...
- 代码审计之metinfo5.1.4
在include/common.inc.php目录下有这样一段代码 这里是有$$变量覆盖的 拿这个sql查询语句测试一下,只要覆盖$tablepre即可进行sql注入 在后面加上如下代码,方便测试的时 ...
- 在eclipse中创建Web项目中没有web.xml的解决方法
右键点击项目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件
- Nginx配置安装(Mac)
我用到的安装工具是:homebrew 真的很方便! 步骤1: 打开终端,输入 brew info nginx结果:我们可以看到,nginx在本地还未安装(Not installed),nginx的来源 ...
- 面向对象---prototype、__proto__、实例化对象三者之间的关系
1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...
- java并发编程(十七)----(线程池)java线程池架构和原理
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...
- DIY cnblog——背景渐变切换
进来的小伙伴应该已经看过了我的博客样式,但还是贴张图先: 先大致说一下实现的思路,然后把代码贴出来供小伙伴们参考. 由于不是特别技术性的文章,格式就放宽松一点,跟着意识流走吧. 先跟大家分享一个渐变背 ...