【Java 8 新特性】Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序
Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序
- 在 TreeMap 中使用
- 在 ConcurrentSkipListMap 中使用
- 参考文献
Java
比较器可以用来控制SortedMap
数据结构的键的顺序。
SortedMap
的实现类是TreeMap
和ConcurrentSkipListMap
。
我们可以将比较器实例传递给TreeMap
和ConcurrentSkipListMap
类的构造函数以控制其键的顺序。
SortedMap
提供了comparator()
方法来返回用于排序该地图中键的比较器。
如果SortedMap
使用键元素的自然排序,那么comparator()
方法返回空。
在本页面中,我们将提供在TreeMap
和ConcurrentSkipListMap
类中使用比较器的例子。
在 TreeMap 中使用
TreeMap
根据其键的自然排序或在Map
创建时提供的比较器进行排序,这取决于使用哪个构造函数。
我们可以通过使用以下构造函数传递比较器来实例化TreeMap
类。
TreeMap(Comparator<? super K> comparator)
它构造一个新的、空的TreeMap
,根据给定的比较器排序。
当我们不传递比较器时,TreeMap
会根据其自然排序对键进行排序。
对于自然排序,一个元素类需要实现Comparable
接口并重写compareTo
方法。
为了获得我们的TreeMap
对象所使用的比较器,SortedMap
提供了comparator()
方法。
现在找到使用TreeMap
类的比较器来控制其键的顺序的例子。
TreeMapDemo.java
import java.util.Comparator;
import java.util.TreeMap;
public class TreeMapDemo {public static void main(String[] args) {Student s1 = new Student("Shyam", 18);Student s2 = new Student("Mohan", 20);Student s3 = new Student("Ram", 22);System.out.println("---TreeMap Order With Comparator---");Comparator<Student> ageComparator = Comparator.comparing(Student::getAge);TreeMap<Student, String> myTreeMap = new TreeMap<>(ageComparator);myTreeMap.put(s1, "Varanasi");myTreeMap.put(s2, "Mathura");myTreeMap.put(s3, "Kashi"); myTreeMap.forEach((k, v) -> System.out.println(k + " - " + v)); //System.out.println("Comparator: "+ myTreeMap.comparator());System.out.println("---TreeMap Natural Order (With Comparable)---");myTreeMap = new TreeMap<>();myTreeMap.put(s1, "Varanasi");myTreeMap.put(s2, "Mathura");myTreeMap.put(s3, "Kashi"); myTreeMap.forEach((k, v) -> System.out.println(k + " - " + v)); }
}
Student.java
public class Student implements Comparable<Student> {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic int compareTo(Student s) {return name.compareTo(s.getName());}@Override public String toString(){return name + "-" + age; }
}
输出
---TreeMap Order With Comparator---
Shyam-18 - Varanasi
Mohan-20 - Mathura
Ram-22 - Kashi
---TreeMap Natural Order (With Comparable)---
Mohan-20 - Mathura
Ram-22 - Kashi
Shyam-18 - Varanasi
在 ConcurrentSkipListMap 中使用
ConcurrentSkipListMap
根据其键的自然排序,或者根据地图创建时提供的比较器进行排序,这取决于使用哪个构造函数。
我们可以通过使用下面的构造函数传递比较器来实例化ConcurrentSkipListMap
类。
ConcurrentSkipListMap(Comparator<? super K> comparator)
它构造一个新的、空的Map
,根据给定的比较器排序。当我们不传递比较器时,ConcurrentSkipListMap
会根据其自然排序对键进行排序。
对于自然排序,一个元素类需要实现Comparable
接口并重写compareTo
方法。
为了获得我们的ConcurrentSkipListMap
对象所使用的比较器,SortedMap
提供了comparator()
方法。
现在找到使用比较器与ConcurrentSkipListMap
类来控制其键的顺序的例子。
ConcurrentSkipListMapDemo.java
import java.util.Comparator;
import java.util.concurrent.ConcurrentSkipListMap;
public class ConcurrentSkipListMapDemo {public static void main(String[] args) {Student s1 = new Student("Shyam", 18);Student s2 = new Student("Mohan", 20);Student s3 = new Student("Ram", 22);System.out.println("---ConcurrentSkipListMap Order With Comparator---");Comparator<Student> ageComparator = Comparator.comparing(Student::getAge);ConcurrentSkipListMap<Student, String> myConcurrentSkipListMap = new ConcurrentSkipListMap<>(ageComparator);myConcurrentSkipListMap.put(s1, "Varanasi");myConcurrentSkipListMap.put(s2, "Mathura");myConcurrentSkipListMap.put(s3, "Kashi"); myConcurrentSkipListMap.forEach((k, v) -> System.out.println(k + " - " + v)); //System.out.println("Comparator: "+ myConcurrentSkipListMap.comparator());System.out.println("---ConcurrentSkipListMap Natural Order (With Comparable)---");myConcurrentSkipListMap = new ConcurrentSkipListMap<>();myConcurrentSkipListMap.put(s1, "Varanasi");myConcurrentSkipListMap.put(s2, "Mathura");myConcurrentSkipListMap.put(s3, "Kashi"); myConcurrentSkipListMap.forEach((k, v) -> System.out.println(k + " - " + v)); }
}
输出
---ConcurrentSkipListMap Order With Comparator---
Shyam-18 - Varanasi
Mohan-20 - Mathura
Ram-22 - Kashi
---ConcurrentSkipListMap Natural Order (With Comparable)---
Mohan-20 - Mathura
Ram-22 - Kashi
Shyam-18 - Varanasi
参考文献
【1】Interface Comparator
【2】Interface SortedMap
【3】Class TreeMap
【4】Class ConcurrentSkipListMap
【5】Java Comparator.comparing
【6】Java Comparator with SortedMap
【Java 8 新特性】Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序相关推荐
- Java 8 新特性:Comparator.naturalOrder | 自然排序
点击关注公众号,实用技术文章及时了解 来源:moonce.blog.csdn.net/article/ details/120324130 naturalOrder是比较器功能接口的静态方法. Jav ...
- 【289期】Java 8 新特性:Comparator.naturalOrder | 自然排序
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... natur ...
- Java 8 新特性 宋红康跟学
Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
- java自动化测试语言高级之Java 9 新特性
java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...
- java自动化测试语言高级之Java 8 新特性
java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...
- 七、Java 14 新特性
七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...
- 跟我学 Java 8 新特性之 Stream 流基础体验
转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...
- 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
转载自 跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...
最新文章
- tomcat安装apr优化
- LSTM实现股票预测--pytorch版本【120+行代码】
- 常用邮箱申请渠道有哪些?此文给你讲清楚了
- c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码
- 我理解消化后的浮点数存储
- python不简单_Python学习并不简单!月薪过万也不易
- 奇异值分解 本质矩阵_Singular Value Decomposition(奇异值分解)
- MySQL length函数使用详解
- Navsoso引领HUD抬头导航潮流
- jTip定制实现博客日历
- [React Native]StatusBar的使用
- linux下如何查看二进制文件,Linux二进制文件的查看方法
- Matlab曲线平滑
- 土壤数据库一些参数解释和补充说明
- oracle本地数据库登录之连接pdb数据库
- linux 64 iso镜像文件下载地址,Linux(RHEL) ISO镜像文件-下载地址
- 数据结构——循环队列
- 卡方检验值转换为P值
- PMP/高项 项目范围管理实践
- 字符串匹配算法之BM算法