在使用优先队列时,我们可以自定义比较器,构造方法如下,这是在做leetcode.502题时遇到的,有思路,但是不会实现,现在用这篇文章记录一下:

       // 构造方法public PriorityQueue(Comparator<? super E> comparator) {this(DEFAULT_INITIAL_CAPACITY, comparator);}// 使用Queue<Integer> queue = new PriorityQueue<>((x, y) -> y - x);

一、概述

Comparable和Comparator在java中都是用于来比较数据大小。实现Comparable接口需要重写compareTo方法,实现Comparator方法需要重写compare方法。 这两个方法返回值都是int类型,根据返回值来判断比较对象的大小,从而实现排序

二、用法

Comparable需要实现,重写compareto方法

    public int compareTo(T o);

从小到大:this.getXXX - o.getXXX()

从大到小:o.getXXX - this.getXXX

Comparetor接口,重写compare()方法

    public static int compare(double d1, double d2) {}

从小到大:return d1 - d2;

从大到小:  return d2 - d1;

再加一种可直接排序的方法,我们使用User对象来进行验证

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer age;private Double money;private String name;
}
public class CompareterTest {public static void main(String[] args) {List<User> list = new ArrayList<>();list.add(new User(1, 1.0, "c"));list.add(new User(1, 2.0, "a"));list.add(new User(1, 2.0, "b"));list.add(new User(3, 2.0, "a"));list.add(new User(3, 1.0, "c"));list.add(new User(3, 3.0, "b"));list.add(new User(2, 1.0, "b"));System.out.println(list);// 在集合工具类排序时可使用thenComparing方法进行多字段排序Collections.sort(list, Comparator.comparingInt((User::getAge)).thenComparing(User::getMoney).thenComparing(User::getName));Collections.sort(list, (a, b) -> {// 按年龄倒叙return b.getAge() - a.getAge();});System.out.println(list);}
}

也可在对象中实现Comparetor接口的compare方法进行自定义排序

比较器:Comparator的用法相关推荐

  1. 关于comparable与comparator的用法(即自定义集合框架用法 )

    1 package javastudy; 2 3 import java.util.Comparator; 4 import java.util.Iterator; 5 import java.uti ...

  2. 比较器Comparator使用

    最近在项目中做视频搜索功能,在获得视频结果集后需要对视频列表根据集数做排序,自然而然想到了用jdk的比较器Comparator, 编写代码实现如下 private void sortResItem(L ...

  3. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  4. Java 对象排序 Comparable接口和比较器Comparator的使用

    我这里使用的是Treeset存储的学生信息,定义了学生类,对学生信息进行一个排序: 方法一 对象排序的的方法是,让元素所属类实现 Comparable 接口 ,重写 comparaTo(To) 方法 ...

  5. java中sort函数comparator的使用_Java Comparator comparingInt()用法及代码示例

    compareInt(java.util.function.ToIntFunction)方法接受一个函数作为参数,从类型T中提取一个int排序键,并返回一个与该排序键进行比较的Comparator.返 ...

  6. java comparator用法_Java Comparator thenComparingLong()用法及代码示例

    Java中Comparator接口的thenComparingLong(java.util.function.ToLongFunction)方法将返回字典顺序比较器,该函数具有提取Long排序键的函数 ...

  7. java comparator相等_Java Comparator thenComparingDouble()用法及代码示例

    Java中Comparator接口的thenComparingDouble(java.util.function.ToDoubleFunction)方法将返回字典顺序比较器,并带有提取双精度排序键的函 ...

  8. 判断比较器Comparator和Comparable的升序降序问题

    比较器 降序升序问题 Comparator中的compare方法 //升序排序 public int compare(int o1, int o2) {return o1 - o2; }//降序排序 ...

  9. java基础---关于比较器Comparator和Comparable

    package com.henu.jihe;import java.util.ArrayList; import java.util.Comparator; import java.util.List ...

最新文章

  1. sql server中的hash应用优化
  2. 白话详细解读(二)-----AlexNet
  3. tensorflow saver_TensorFlow: Model Persistence
  4. 可能是最全面的 Java G1学习笔记
  5. 关于 win7 远程桌面的多用户问题
  6. FreeModbus移植到STM32F107(以太网传输方式)
  7. python @修饰符_Python修饰符,返回替换了一个或多个参数的函数
  8. java多线程编码实现_Java多线程编码
  9. 微信网页开发 thinkphp5.0的try-catch和重定向
  10. kerberos的系统搭建
  11. 苹果 tvOS 10 第二个开发者测试版发布
  12. win10桌面null图标删除
  13. 《C陷阱与缺陷》读书笔记与总结
  14. CALL TRANSACTION使用及传参数和权限检查(authority-check)
  15. 青春是一场眼眸里的微笑
  16. Python全栈开发-gitgithub快速入门
  17. miui12是Android版本,miui12基于安卓几版本开发的?miui12是安卓11吗[多图]
  18. 使用Go+WebSocket练习总结
  19. Vue之路由--SPA模式
  20. 解决突然跳出命令行(闪烁)

热门文章

  1. 第9章 初识SqlSugarCore之AutoMapper
  2. 华为 android 11,Android 11发布,华为正式官宣,新系统更值得期待!
  3. 小学计算机英语,纳米盒小学英语电脑版
  4. 词嵌入(word embedding)学习记录
  5. Airtest IDE 自动化测试10——text和keyevent
  6. 富人与穷人的不同思维
  7. 4.图片便签和路径说明
  8. 不禁网页的浏览器_明明浏览“不良网站”危险,为啥手机浏览器却不强制禁止访问?...
  9. 华为鸿蒙发布会不选深圳,最高149999!华为一系列新品发布:不仅鸿蒙,这就是未来...
  10. python系列—数据类型篇(数值型)