Comparator接口中compare(Object o1,Object o2)方法是java.util.Comparator接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。

对于任何的object类,都可以使用compareto方法,如O1.compareto(O2),O1<O2,返回-1;O1==O2,返回0;O1>O2,返回1.

补充:对于字符串的compareto方法
compareTo方法有两种:
compareTo(String str) 按字典顺序比较两个字符串。
compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。

之前一直搞不清楚自定义的compare的返回值到底怎么处理,一番查询和总结后得到如下结果:
compare(Object o1,Object o2)方法中,默认采用的是o1-o2,若o1<o2,返回值为-1;若o1==o2,返回值为0;若o1>o2,返回值为1;而其排序结果是按-1来排序的,即默认为从小到大排序。(其实也就是o1.compareto(o2)

所以如果返回值为-1,两值位置不变,若返回值为1,两值位置调换
也就有了自定义的从小到大排序和从大到小排序,或者根据题目要求的特殊自定义排序。

从小到大(o1-o2)

PriorityQueue<Integer> p=new PriorityQueue<Integer>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1-o2;}});

从大到小(o2-o1)

PriorityQueue<Integer> p=new PriorityQueue<Integer>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});

特殊自定义排序,比如优先队列中每个元素存储一个数组【j,k】;如果j的值不同,则按j从大到小排序,如果相同,则按k的值从小到大排序

PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] pair1, int[] pair2) {return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair1[1] - pair2[1];}});

这里再补一道有关把整数转化成字符串再求组合数最大值的题

class Solution {public String largestNumber(int[] nums) {List<String> list=new ArrayList<String>();String res="";//把元素都转化成字符串放入list中for(int n:nums)list.add(String.valueOf(n));//自定义排序,比如若字符串a+b<b+a,则b应该排在a前面//下面compareto方法中若b+a<a+b,则返回-1;说明排列应该是ab,即a,b不用交换顺序Collections.sort(list,new Comparator<String>() {public int compare(String a, String b) {return(b+a).compareTo(a+b);}});//如果排序后第一个就是0,则说明后面也只可能是0了,则返回“0”//注意这里只能用equal,不能用==if(list.get(0).equals("0")) return "0";for(String s:list)res+=s;return res;}
}

Java Comparator接口和compareto方法总结相关推荐

  1. [Java] Comparator接口/compare方法的介绍与使用

    上一篇文章讲了Comparable接口的使用,建议搭配食用. 背景 在实现Comparable接口的前提下,对象间已经有一套可适用的大小比较规则/排序规则了.然而某些情况下,由compareTo定义的 ...

  2. Java Comparator接口

    Java Comparator接口 代码演示 演示1. package Practice;import java.util.ArrayList;import java.util.Collections ...

  3. 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序

    Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...

  4. java Comparator接口使用详解

    Comparator接口中有一个方法int compare(T o1, T o2).这个方法返回值是int类型,如果返回值小于0,说明比较结果是o1<o2,如果返回值等于0,说明比较结果是o1= ...

  5. java调用接口实现的方法_java调用接口的实现方法

    java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...

  6. java comparator接口类_常见的接口与类 -- Comparator

    接口Comparator 1.1 前面我们讲过Java提供了一个用于比较的接口Comparable,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法.实际上Java中除了比较一个接口 ...

  7. Java compare方法和compareTo方法

    1.compare 对于 public int compare(Object arg0, Object arg1)的理解 //数组排序 String[] str = new String[5]; Ar ...

  8. java Workbook接口 提供的方法

    完整路径: Workbook类提供的方法 1. int getNumberOfSheets() 获得工作薄(Workbook)中工作表(Sheet)的个数,示例: jxl.Workbook rwb = ...

  9. Java中String类 compareTo()方法比较字符串详解

    中心:String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型 1.当两个比较的字符串是英文且长度 ...

最新文章

  1. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.27
  2. 中餐菜单分类名称创意_外卖运营小知识:优化外卖菜单,挽回店铺亏损
  3. npm更换成淘宝镜像源以及cnpm
  4. git针对已有仓库或已有文件的初始化操作
  5. C语言模拟实现标准库函数之strcmp()
  6. DataTemplate——数据模板的一个典型例子
  7. vue项目安装引入css-loader - cmd篇
  8. CSS链接四种状态注意顺序、UI伪类选择器的顺序
  9. android 魅族短信拦截,如何防护手机里的个人信息?魅族18系列教你如何防范隐私泄露...
  10. 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
  11. 【java】swing窗口中的JOptionPane类及字符串转其他数据类型的应用
  12. 52多项式07——有理系数和整系数多项式、埃森斯坦判别法、整系数多项式的有理根
  13. Oracle下载安装教程—Oracle19c下载安装(每一步)
  14. 设备\Device\Harddisk1\DR1 有一个不正确的区块
  15. 再谈斐波那契,把数字翻译成字符串
  16. 子桓说:员工苦不应该,领导苦是咎由自取!
  17. 【List】个人 常用学习工作软件清单
  18. markdown写公式的角标与下标
  19. java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...
  20. PROCAST-重力铸造分析流程

热门文章

  1. Rational Purify 使用及分析实例
  2. 初探Netty:Netty原理、核心组件、数据容器以及运行机制
  3. MAT 分析堆内存快照
  4. Debug命令的使用详细教程
  5. 如何填报大数据相关专业? | Alfred数据室
  6. PHPCMS模板里面使用自定义函数
  7. Ubuntu16.04、18.04 设置pycharm图标到桌面(成功使用)
  8. 北漂女孩生活记--原来这就是大北京
  9. iview+vue实现表头的拖拽功能
  10. 机器学习基本库之Matplotlib