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,
boolean inclusive)

          返回此映射的部分视图,其键小于(或等于,如果
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,
boolean fromInclusive, K toKey, boolean toInclusive)


          返回此映射的部分视图,其键的范围从 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,
boolean inclusive)

          返回此映射的部分视图,其键大于(或等于,如果
inclusive 为 true)fromKey
 Collection<V> values()

          返回此映射包含的值的 Collection 视图。

参考文章:https://www.cnblogs.com/TonyYPZhang/p/5747850.html

Java集合框架之TreeMap浅析的更多相关文章

  1. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  2. Java集合框架之HashMap浅析

    Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...

  3. Java集合框架之HashSet浅析

    Java集合框架之HashSet浅析 一.HashSet综述: 1.1HashSet简介 位于java.util包下的HashSet是Java集合框架的重要成员,它在jdk1.8中定义如下: publ ...

  4. Java集合框架之Vector浅析

    Java集合框架之Vector浅析 一.Vector概述: 位于java.util包下的Vector是Java集合框架的重要一员,虽然没有ArrayList那么的常用,但是我们还要对其做相关学习: 1 ...

  5. Java集合框架之LinkedList浅析

    Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...

  6. Java集合框架之ArrayList浅析

    Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...

  7. Java集合框架系列大纲

    ###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...

  8. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  9. 【java集合框架源码剖析系列】java源码剖析之TreeMap

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...

随机推荐

  1. jQuery 小测试

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 提示使用has() 答案: $(div:has(s ...

  2. http.client.ResponseNotReady: Request-sent

    最近学习python写接口测试,使用的是connection.request 发现在测试一个发送报告接口时候,同一个接口,同样的脚本,只是一个参数传不同值,总提示:http.client.Respon ...

  3. Hadoop自学系列集(三) ---- Hadoop安装

    这节就开始讲述Hadoop的安装吧.在这之前先配置下SSH免密码登录,为什么需要配置这个呢?大家都知道Hadoop集群中可能有几十台机器甚至是上千台机器,而每次启动Hadoop都需要输入密码才能够登录 ...

  4. JS面向对象编程(一):封装

    js是一门基于面向对象编程的语言.      如果我们要把(属性)和(方法)封装成一个对象,甚至要从原型对象生成一个实例,我们应该怎么做呢?  一.生成对象的原始模式            假定把猫看 ...

  5. Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种.Hard Link 文件又被称为硬链接文件.实体链接文件,Symbolic Link 文件则常被称为符号链接.软链接 ...

  6. JDK的命令行工具系列 (二) javap、jinfo、jmap

    javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出publ ...

  7. Apache之——多虚拟主机多站点配置的两种实现方案

    Apache中配置多主机多站点,可以通过两种方式实现: 将同一个域名的不同端口映射到不同的虚拟主机,不同端口映射到不同的站点: 将同一个端口映射成不同的域名,不同的域名映射到不同的站点. 我们只需要修 ...

  8. Hadoop 系列(二)—— 集群资源管理器 YARN

    一.hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群资源管理系统.用户可以将各种服务框架部 ...

  9. Netty学习(一)-为什么选择Netty

    前面我们简单学习了NIO.我们知道java的I/O模型一共有四种,分别是:传统的BIO,伪异步I/O,NIO和AIO.为了澄清概念和分清区别,我们还是先简单的介绍一下他们的概念,然后再去比较优劣.以及 ...

  10. Powered by .NET Core 进展:用 docker-compose 验证高并发问题嫌疑犯 docker swarm

    相关博文: [故障公告]发布 .NET Core 版博客站点引起大量 500 错误 [网站公告].NET Core 版博客站点第二次发布尝试 暴风雨中的 online : .NET Core 版博客站 ...