java sort排序[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
Java中Comparable和Comparator区别小结
栗子
默认的sort方法,根据元素的自然顺序,将指定的列表按升序排序12345。 注:倒序54321 第二个方法,根据指定比较器产生的顺序对指定的列表进行排序。
快速记忆法
参考 当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。
当后一个对象比当前对象大,返回结果值为1时,前后交换,说明是倒序排列。
当后一个对象比当前对象小,返回结果值为1时,前后交换,说明是升序排列。
即,前一个数-后一个数,大于0,前后交换,说明是升序排列。
//Integer集合,正序排序
List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer t1, Integer t2) {
return t1 - t2;//t1-t2>0
}
});
比如下面,根据创建时间倒序排序,即数字大的在最前面,对于时间来讲,越大就是距离现在越近的。所以后被创建的会排在前面
Collections.sort(group.getWorkDetails(), new Comparator<IWorkDetail>() {
@Override
public int compare(IWorkDetail o1, IWorkDetail o2) {
return (int) (o2.getCreateDate().getTime() - o1.getCreateDate().getTime());
}
});
1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。
2.实现什么方法
int compareTo(T o) 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
参数: o – 要比较的对象。 返回: 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。 抛出: ClassCastException – 如果指定对象的类型不允许它与此对象进行比较。
3.实例
package test1;
public class Note<T> implements Comparable<Note<T>> {
private T data; //数据
private int weight; //权值
private Note<T> left; //左孩子
private Note<T> right; //右孩子
public Note(T data,int weight){
this.data=data;
this.weight=weight;
}
@Override
public String toString(){
return "data="+this.data+",weitht="+this.weight;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Note<T> getLeft() {
return left;
}
public void setLeft(Note<T> left) {
this.left = left;
}
public Note<T> getRight() {
return right;
}
public void setRight(Note<T> right) {
this.right = right;
}
/**
* 倒序排列。
*/
@Override
public int compareTo(Note<T> o) {
if(o.weight>this.weight){
return 1;
}else if(o.weight<this.weight){
return -1;
}
return 0;
}
/**
* 升序排列
*/
// @Override
// public int compareTo(Note<T> o){
// if(this.weight>o.weight){
// return 1;
// }else if(this.weight<o.weight){
// return -1;
// }
// return 0;
// }
string排序
Collections.sort(stringList, new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
if (rhs == null) {
return 1;
}
if (lhs == null) {
return -1;
}
if (lhs.length() > rhs.length()) {
return 1;
}
if (lhs.length() < rhs.length()) {
return -1;
}
int i = lhs.compareTo(rhs);
if (i > 0) {
return 1;
} else {
return -1;
}
}
});
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159877.html原文链接:https://javaforall.cn
相关文章
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- java转换字符串为时间_JAVA字符串转日期或日期转字符串
- java卸载 安装错误_Java卸载后无法重新安装 提示已安装过[通俗易懂]
- java random函数用法_JAVA的Random类的用法详解[通俗易懂]
- java简单的除法运算_Java除法运算的陷阱[通俗易懂]
- java 实现 按位异或_Java 按位异或的性质及其妙用
- java 链表长度_Java实现单向链表[通俗易懂]
- 编写java判断闰年_用Java程序判断是否是闰年的简单实例[通俗易懂]
- java工程师_Java工程师是青春饭吗?[通俗易懂]
- 反应java程序并行机制的特点_Java语言具有许多优点和特点,下列选项中能反映Java程序并行机制特点的是()。…[通俗易懂]
- java %08d_总结Java中String.format()的使用[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java编写一个学生类和教师类,Java创建一个学生类[通俗易懂]
- java中文乱码_Java中文乱码问题的解决方案[通俗易懂]
- java 堆栈的声明_Java 堆栈[通俗易懂]
- 八大排序算法(java实现) 冒泡排序 快速排序 堆排序 归并排序 等[通俗易懂]
- java链表排序方法_java链表排序
- Java生成随机数组_java生成唯一数字
- 输出数组的全排列java_java用sort对一个数组排序
- java解释器虚拟机-Java代码如何运行在Java虚拟机中
- 【蓝桥杯2022省赛】蓝桥杯题目笔记 Java版本数位排序、求阶乘基础与灵活分析
- 《企业级Java现代化》推荐序
- Java实现各种排序算法详解编程语言
- 玩转Linux:Java开发入门指南(linux上开发java)
- 应用Linux监控下Java应用性能分析(linux监控java)
- MySQL与Java的数据交互之旅(mysql对应java)
- 教程:在Linux系统下安装Java(linux下java安装)
- 基于Linux操作系统上实现 Java 编程(linux r java)