注意: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. Sql语句:条件限制语句

    where select sname,sdept,sage from student where ssex = '男' or ssex = '女' and sage not between 20 an ...

  2. Markdown 中如何添加图片

    语法 ![alt text](uri "optional title") alt text:可选,图片标签,用来描述的关键词,图片加载错误时候的替代文本,也可用于SEO. uri: ...

  3. C#多线程编程(二)线程池与TPL

    一.直接使用线程的问题 每次都要创建Thread对象,并向操作系统申请创建一个线程,这是需要耗费CPU时间和内存资源的. 无法直接获取线程函数返回值 无法直接捕捉线程函数内发生的异常 使用线程池可以解 ...

  4. DevOps工程师技能

    技术背景 DevOps工程师必须持有计算机科学.工程或其他相关领域的学位.2年以上工作经验.这包括开发人员.系统管理员或devops驱动的团队成员的工作.这是一个重要的需求,同时也是对所有IT操作的理 ...

  5. zk基础—5.Curator的使用与剖析

    大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curat ...

  6. javaWeb基础之会话(Cookies、Session)

    一. 1. 会话:一次会话中包含多次请求和响应 2. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止[浏览器关闭或服务器关闭] 功能:在一次会话的范围内的多次请求间,共享数据 ...

  7. python-docx 设置表格边框

    # -*- coding: utf-8 -*- """ Created on Sat Oct 24 17:21:31 2020 pip install -i https: ...

  8. <HarmonyOS第一课04>应用程序框架基础

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497122909477?ha_sou ...

  9. 【记录】Excel 2021|(一)VBA操作Excel入门,在姓和名之间打空格,如“ZhangSanSan“改成“Zhang SanSan“

    版本:Excel 2021. 打开VBA界面:快捷键Alt+F11.(或视图-宏). 录制宏,再看看宏的代码,就可以基本了解常规的Excel操作在VBA里是什么德行. 比方说,我需要对一个选区进行修改 ...

  10. IT/互联网行业突围之路:ChatGPT驱动下的未来

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...