Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序

  • 在 TreeMap 中使用
  • 在 ConcurrentSkipListMap 中使用
  • 参考文献

Java比较器可以用来控制SortedMap数据结构的键的顺序。

SortedMap的实现类是TreeMapConcurrentSkipListMap

我们可以将比较器实例传递给TreeMapConcurrentSkipListMap类的构造函数以控制其键的顺序。

SortedMap提供了comparator()方法来返回用于排序该地图中键的比较器。

如果SortedMap使用键元素的自然排序,那么comparator()方法返回空。

在本页面中,我们将提供在TreeMapConcurrentSkipListMap类中使用比较器的例子。

在 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 排序相关推荐

  1. Java 8 新特性:Comparator.naturalOrder | 自然排序

    点击关注公众号,实用技术文章及时了解 来源:moonce.blog.csdn.net/article/ details/120324130 naturalOrder是比较器功能接口的静态方法. Jav ...

  2. 【289期】Java 8 新特性:Comparator.naturalOrder | 自然排序

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... natur ...

  3. Java 8 新特性 宋红康跟学

    Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...

  4. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  5. java自动化测试语言高级之Java 9 新特性

    java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...

  6. java自动化测试语言高级之Java 8 新特性

    java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...

  7. 七、Java 14 新特性

    七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...

  8. 跟我学 Java 8 新特性之 Stream 流基础体验

    转载自   跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...

  9. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

最新文章

  1. tomcat安装apr优化
  2. LSTM实现股票预测--pytorch版本【120+行代码】
  3. 常用邮箱申请渠道有哪些?此文给你讲清楚了
  4. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码
  5. 我理解消化后的浮点数存储
  6. python不简单_Python学习并不简单!月薪过万也不易
  7. 奇异值分解 本质矩阵_Singular Value Decomposition(奇异值分解)
  8. MySQL length函数使用详解
  9. Navsoso引领HUD抬头导航潮流
  10. jTip定制实现博客日历
  11. [React Native]StatusBar的使用
  12. linux下如何查看二进制文件,Linux二进制文件的查看方法
  13. Matlab曲线平滑
  14. 土壤数据库一些参数解释和补充说明
  15. oracle本地数据库登录之连接pdb数据库
  16. linux 64 iso镜像文件下载地址,Linux(RHEL) ISO镜像文件-下载地址
  17. 数据结构——循环队列
  18. 卡方检验值转换为P值
  19. PMP/高项 项目范围管理实践
  20. 字符串匹配算法之BM算法

热门文章

  1. postgis建立空间索引
  2. 旅游业有哪些跨界营销玩法,该怎么做?
  3. python的flask框架mysql数据库迁移
  4. C/C++术语中英文对照
  5. 内受古国企老总贪污黄金120斤黑银1.4吨
  6. 晒单!米赚推荐号:5665640 有图有真相!
  7. Android ScaleAnimation缩放动画,RecyclerView item选中放大
  8. Kaldi语音识别技术(五) ----- 特征提取
  9. 时间序列模型算法 - ARIMA (一)
  10. 五款必备iPad少儿科普知识类应用