注意:Map与Set集合的关系非常密切。java源码就是先实现了HashMap,TreeMap,再包装了一个value都为null的Map集合实现Set集合类。

因此:TreeSet可以和TreeMap对比来看

 TreeSet存储key-value对时,根据key对节点进行排序。;类似得,也有两种方法进行排序。

简单说:

自然排序:TreeMap所有的key必须实现Comparable接口。而且所有的Key必须是同一个类的对象。

定制排序:创建TreeMap时,传入一个Comparator对象,这个对象负责对TreeMap中的所有的Key进行排序。(例子可参见TreeSet两种排序)

类似于TreeSet判断两个元素相等的条件,TreeMap判断两个key相等的条件是CompareTo()方法返回0.

小注意的点:如果让自定义的类作为TreeMap的Key,则重写该类的equals()方法和CompareTo方法应该保持一致的返回结果。如果结果不一致则TreeMap和Map的规则就会冲突。(如果Map的key相等,则equals为true)

下面是TreeMap的一些方法,根据key顺序访问key-value对的方法。

Object firstKey()返回该Map最小的key值,如果为空或不存在则返回NULL

Object lastKey()返回该Map最大的key值,如果为空或不存在则返回NULL

 Map.Entry firstEntry() 返回该Map最小的KEY对应的key-value对方法

 Map.Entry lastEntry() 返回该Map最大的KEY对应的key-value对方法

 Map.Entry higherEntry(Object key) 返回该Map大于指定的的KEY最小key对应的key-value对方法

 Map.Entry lowerEntry(Object key) 返回该Map小于指定的的KEY最大key对应的key-value对方法

Object lowerKey(Object key) 返回该Map小于指定的的KEY最大key值

Object higherKey(Object key) 返回该Map大于指定的的KEY最小key值

NavigableMap subMap(Object fromKey,boolean fromInclusive,Object toKey,boolean toInclusive) 返回一个子Map,范围从fromKey(是否包含取决于第二个)到toKey(是否包含取决于第四个)

SortedMap subMap(Object fromKey,Object toKey) 同上,但是前包括,后不包括

SortedMap tailMap(Object fromKey) 大于指定key的子Map,包括指定Key

NavigableMap tailMap(Object fromKey,boolean fromInclusive)大于指定key的子Map,包括不包括取决于后者

SortedMap headMap(Object toKey) 小于指定key的子Map,包括指定Key

NavigableMap headMap(Object toKey,boolean toInclusive)小于指定key的子Map,包括不包括取决于后者

看晕了吗?总结一下就是key-value都是有序的,所以上面方法就是访问第一个前一个后一个,最后一个key-vaue对,并提供了几个截取子TreeMap方法。
 

TreeMap实现类和SortMap接口的更多相关文章

  1. Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】

    Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...

  2. 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait

    [源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...

  3. Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca

    #34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void ...

  4. Android中一个类实现的接口数不能超过七个

    近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.

  5. Thread类与Runnable接口的深入理解

    Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...

  6. 探Java多线程Thread类和Runnable接口之间的联系

    首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情 ...

  7. PHP类继承、接口继承关系概述

    PHP类继承: PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &quo ...

  8. “全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. Java的Stack类实现List接口真的是个笑话吗

        今天在网上闲逛时看到了这样一个言论,说“Java的Stack类实现List接口的设计是个笑话”.   当然作者这篇文章的重点不是这个,原本我也只是一笑置之,然而看评论里居然还有人附和,说“Ja ...

  10. “全栈2019”Java第八十章:外部类是否能实现本类中的接口?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 【Git】在 Eclipse 中使用 Git

    在 Eclipse 中使用 Git Eclipse 中默认自带了 Git 插件,通过点击 Help→About Eclipse IDE 可以查看 1 全局配置 1.1 配置用户名和邮箱 点击 Wind ...

  2. C 图上的遍历算法

    图上的遍历算法 广度优先搜索 BFS 概念 广度优先搜索(Breadth-First Search)是一种图遍历算法,用于在图或树中按层次逐层访问节点.它从源节点(起始节点)开始,首先访问源节点的所有 ...

  3. Spring的三级缓存详解

    目录 1.什么是三级缓存 2.三级缓存详解 Bean实例化前 属性赋值/注入前 初始化后 总结 3.怎么解决的循环依赖 4.不用三级缓存不行吗 5.总结 一.什么是三级缓存 就是在Bean生成流程中保 ...

  4. symfony快速构建restfull api--api-platform初体验(快速上手笔记)

    初识api-platform: 都0202年了,整天还在用php一遍又一遍的写crud api吗?还在为构建restfull风格api而烦恼吗?那么,symfony的衍生框架api-platform你 ...

  5. WSL 安装配置 MySQL

    在 WSL 安装并配置 MySQL 与在 Ubuntu Server 安装配置 MySQL 一样的步骤.简要记录一下配置的过程. 安装 MySQL 参考微软官方文档[1]安装MySQL. sudo a ...

  6. 我的C/C++开发环境

    我的C/C++开发环境 OS: WSL Ubuntu Compiler: gcc Editor: VS Code Extensions: C/C++ Extenion Pack Settings: 时 ...

  7. CSS 魔法与布局技巧

    CSS 布局与视觉效果常用实践指南 在我一篇随笔中其实有说到十大布局,里面有提到 flex 布局.grid 布局.响应式布局,不过没有提到容器查询这个,现在说下这三个布局然后穿插下容器查询把. 1️⃣ ...

  8. windows11 安装WSL2详细过程

    一.什么是 WSL 2 时间来到 2017 年,事情正在起变化.微软正式发布了「适用于 Linux 的 Windows 子系统」,即人们熟知的 Windows Subsystem for Linux, ...

  9. 结合pandas,sqlite3批量将csv数据导入sqlite数据库

    import sqlite3 import pandas as pd conn=sqlite3.connect(r'demo.db') c=conn.cursor() 创建新表 c.execute(& ...

  10. 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)

    1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至 ...