TreeMap实现类和SortMap接口
注意:Map与Set集合的关系非常密切。java源码就是先实现了HashMap,TreeMap,再包装了一个value都为null的Map集合实现Set集合类。
因此:TreeSet可以和TreeMap对比来看
简单说:
自然排序: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接口的更多相关文章
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait
[源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...
- Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca
#34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void ...
- Android中一个类实现的接口数不能超过七个
近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.
- Thread类与Runnable接口的深入理解
Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- PHP类继承、接口继承关系概述
PHP类继承: PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &quo ...
- “全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java的Stack类实现List接口真的是个笑话吗
今天在网上闲逛时看到了这样一个言论,说“Java的Stack类实现List接口的设计是个笑话”. 当然作者这篇文章的重点不是这个,原本我也只是一笑置之,然而看评论里居然还有人附和,说“Ja ...
- “全栈2019”Java第八十章:外部类是否能实现本类中的接口?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- for循环的注意事项
1.注意事项! 实操 可以看见上图,当{}里的循环走完后,i还存在,但是a消失了,因此{}里的变量会在每一次循环结束后释放 . 这也是为什么之前我们打印a会出错的原因:a早就已经从内存中释放了,还怎么 ...
- 【Java】TCP套接字编程
服务器 server.java package socket; import java.io.*; import java.net.*; public class server { public st ...
- 【QT】Linux下安装QT开发环境
Linux下安装QT开发环境 零.下载安装包 从以下网址可以下载QT的所有版本: https://download.qt.io/ 这次演示安装5.9.0版本,因为是长期支持的版本,所以进入到archi ...
- 搞笑的ini文件读取ReadSectionValues
用fdconnection自动生成连接文本,将其写入ini文件,用于程序的读写.ini文件见后面. Lfini.ReadSection('LocalConnection',lstrings); Sho ...
- nginx 安装及负载配置
1.官网下载nginx源码包 http://nginx.org/download/nginx-1.8.1.tar.gz 2.上传到opt目录,解压 cd /opt tar -zxvf nginx-1. ...
- FastAPI 核心功能的完整示例代码,涵盖 WebSocket、后台任务、生命周期事件、中间件配置及会话管理
以下是一个整合 FastAPI 核心功能的完整示例代码,涵盖 WebSocket.后台任务.生命周期事件.中间件配置及会话管理.代码结构参考了多个技术文档的最佳实践: from contextlib ...
- HTB打靶记录-TheFrizz
信息收集 nmap -sV -sC -O 10.10.11.60 Nmap scan report for 10.10.11.60 Host is up (0.63s latency). Not sh ...
- Canvas上批量创建可视对象(DrawingVisual)管理,获取鼠标悬浮图形状态,并控制鼠标右键快捷菜单等...
近期公司有个新的定制,先简要说明下: 窗口上有个播放区域,区域上悬浮了很多可视对象(DrawingVisual),全部是动态生成的.... 现在的需求是在这些矩形框上需要添加右键快捷菜单... 需求知 ...
- Result、ConfigAwait、ValueTask
Result.ConfigAwait.ValueTask 参照: C# Async/Await: ConfigAwait, ValueTask是个啥?对提高性能有用么?_哔哩哔哩_bilibili 理 ...
- Java编程--接口(interface)简单用法(一)
接口是Java中的一个重要的概念. interface:定义了子类要实现的功能.由全局常量和抽象方法组成. 接口的定义 定义一个简单的interface public interface A { p ...