Java Comparator接口和compareto方法总结
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方法总结相关推荐
- [Java] Comparator接口/compare方法的介绍与使用
上一篇文章讲了Comparable接口的使用,建议搭配食用. 背景 在实现Comparable接口的前提下,对象间已经有一套可适用的大小比较规则/排序规则了.然而某些情况下,由compareTo定义的 ...
- Java Comparator接口
Java Comparator接口 代码演示 演示1. package Practice;import java.util.ArrayList;import java.util.Collections ...
- 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序
Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...
- java Comparator接口使用详解
Comparator接口中有一个方法int compare(T o1, T o2).这个方法返回值是int类型,如果返回值小于0,说明比较结果是o1<o2,如果返回值等于0,说明比较结果是o1= ...
- java调用接口实现的方法_java调用接口的实现方法
java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...
- java comparator接口类_常见的接口与类 -- Comparator
接口Comparator 1.1 前面我们讲过Java提供了一个用于比较的接口Comparable,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法.实际上Java中除了比较一个接口 ...
- Java compare方法和compareTo方法
1.compare 对于 public int compare(Object arg0, Object arg1)的理解 //数组排序 String[] str = new String[5]; Ar ...
- java Workbook接口 提供的方法
完整路径: Workbook类提供的方法 1. int getNumberOfSheets() 获得工作薄(Workbook)中工作表(Sheet)的个数,示例: jxl.Workbook rwb = ...
- Java中String类 compareTo()方法比较字符串详解
中心:String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型 1.当两个比较的字符串是英文且长度 ...
最新文章
- [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.27
- 中餐菜单分类名称创意_外卖运营小知识:优化外卖菜单,挽回店铺亏损
- npm更换成淘宝镜像源以及cnpm
- git针对已有仓库或已有文件的初始化操作
- C语言模拟实现标准库函数之strcmp()
- DataTemplate——数据模板的一个典型例子
- vue项目安装引入css-loader - cmd篇
- CSS链接四种状态注意顺序、UI伪类选择器的顺序
- android 魅族短信拦截,如何防护手机里的个人信息?魅族18系列教你如何防范隐私泄露...
- 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
- 【java】swing窗口中的JOptionPane类及字符串转其他数据类型的应用
- 52多项式07——有理系数和整系数多项式、埃森斯坦判别法、整系数多项式的有理根
- Oracle下载安装教程—Oracle19c下载安装(每一步)
- 设备\Device\Harddisk1\DR1 有一个不正确的区块
- 再谈斐波那契,把数字翻译成字符串
- 子桓说:员工苦不应该,领导苦是咎由自取!
- 【List】个人 常用学习工作软件清单
- markdown写公式的角标与下标
- java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...
- PROCAST-重力铸造分析流程