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 ...
随机推荐
- 安装解压版MySQL5.76及以上版本 出现服务正在启动-服务无法启动的问题
最近重装了系统,去MySQL官网下载了最新的MySQL5.7.9,我选择的是解压版,安装之后启动服务的时候,提示服务无法启动,在网上找了很多教程,弄了很久都没有弄好,后来还是决定去英文官网找找答案, ...
- Uploadify.js引用导致浏览器宽度计算错误,布局混乱
首先,本人新手,高手勿喷,请忽略.谢谢. 今天在写代码的时候遇到一个奇葩问题,我再在页面加载完成以后,动态计算DIV宽度,将整个层铺满浏览器.一切正常.单当我引入jquery.uploadify.js ...
- nodejs 如何自动化配置环境参数
应用场景: 最近用 node 重构了网站的项目,部署到测试环境的时候测试一切正常. 直到有一天,运维把代码上线到内测环境的时候...... 突然发现:内测环境和测试环境竟然是同一台服务器,只不过是把代 ...
- k8s1.9.0安装--环境准备
一.预先准备环境 1. 准备服务器 这里准备了三台centos虚拟机,每台一核cpu和2G内存,配置好root账户,并安装好了docker,后续的所有操作都是使用root账户.虚拟机具体信息如下表: ...
- PowerDesigner添加唯一键(mysql)
1.打开Columns选项卡 2.选中要添加唯一键的字段 3.点击工具栏Create Key按钮,如图 4.打开创建key窗口,根据情况修改约束名称,不修改也可以 5.切换到mysql选项卡,选中“U ...
- 这半年时间学Mysql的总结
一条sql语句的执行流程 select * from t where id=1 1.mysql执行一条查询语句的流程 1.1客户端输入用户名密码连接mysql服务器 1.2查询这条sql语句有没有对应 ...
- 入门MySQL——基础语句篇
前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及 ...
- ubuntu/deepin 下下载wxpython
1 输入apt-cache search wxpython 如果有返回信息 则输入 sudo apt-get install python-tools 2 否则 1.添加软件源地址到apt列表中.输入 ...
- 【一些小常识】Linux文件目录的通配符用法/*
在使用linux命令的时候,一时有点搞不清*的用法,于是整理记录下,在做jenkins 持续集成时还是很有用的 “*”在通配符中是最常用的一种,主要整理下在使用Linux命令时,文件夹目录的用法. 1 ...
- 伪分布式Spark + Hive on Spark搭建
Spark大数据平台有使用一段时间了,但大部分都是用于实验而搭建起来用的,搭建过Spark完全分布式,也搭建过用于测试的伪分布式.现在是写一遍随笔,记录一下曾经搭建过的环境,免得以后自己忘记了.也给和 ...