实现Comparator接口

实现该接口需要重写compare()方法

        Arrays.sort(students, new Comparator<Student>() {
@Override
// 升序 o1 - o2
// 降序 o2 - o1
public int compare(Student o1, Student o2) {
if(o1.age == o2.age)
return o1.id - o2.id;
return o2.age - o1.age;
}
});

实现Comparable接口

实现该接口需要重写compareTo()方法

		class Student implements Comparable<Student>{

		    int id;
int age; public Student(int id,int age){
this.id = id;
this.age = age;
} @Override
// 升序 this - o
// 降序 o - this
public int compareTo(Student o) {
if(this.age == o.age)
return o.id - this.id;
return this.age - o.age;
}
}

完整代码

import java.util.Arrays;
import java.util.Comparator; public class 自定义排序 { public static void main(String[] args){ Student[] students = new Student[10]; students[0] = new Student(1001,5);
students[1] = new Student(1002,4);
students[2] = new Student(1003,3);
students[3] = new Student(1004,2);
students[4] = new Student(1005,1);
students[5] = new Student(1006,1);
students[6] = new Student(1007,2);
students[7] = new Student(1008,3);
students[8] = new Student(1009,4);
students[9] = new Student(1011,5); System.out.println("Comparator:根据年龄降序排序,如果年龄相同,则根据id升序"); // 根据年龄降序排序,如果年龄相同,则根据id升序
Arrays.sort(students, new Comparator<Student>() {
@Override
// 升序 o1 - o2
// 降序 o2 - o1
public int compare(Student o1, Student o2) {
if(o1.age == o2.age)
return o1.id - o2.id;
return o2.age - o1.age;
}
}); for(Student s : students)
System.out.println(s.id + " " + s.age); System.out.println("Comparable:根据年龄升序排序,如果年龄相同,则根据id降序"); // 根据年龄升序排序,如果年龄相同,则根据id降序
Arrays.sort(students);
for(Student s : students)
System.out.println(s.id + " " + s.age);
} } class Student implements Comparable<Student>{ int id;
int age; public Student(int id,int age){
this.id = id;
this.age = age;
} @Override
// 升序 this - o
// 降序 o - this
public int compareTo(Student o) {
if(this.age == o.age)
return o.id - this.id;
return this.age - o.age;
}
}

运行结果

Comparator:根据年龄降序排序,如果年龄相同,则根据id升序
1001 5
1011 5
1002 4
1009 4
1003 3
1008 3
1004 2
1007 2
1005 1
1006 1
Comparable:根据年龄升序排序,如果年龄相同,则根据id降序
1006 1
1005 1
1007 2
1004 2
1008 3
1003 3
1009 4
1002 4
1011 5
1001 5

Java自定义排序的更多相关文章

  1. LeetCode1029 两地调度(贪心+java自定义排序回顾)

    题目: 公司计划面试 2N 人.第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]. 返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵 ...

  2. Java自定义排序:继承Comparable接口,重写compareTo方法(排序规则)

    代码: 1 import java.util.*; 2 3 /** 4 * 学习自定义排序:继承Comparable接口,重写compareTo方法(排序规则). 5 * TreeMap容器的Key是 ...

  3. Java集合框架实现自定义排序

    Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...

  4. 【Java】Treeset实现自定义排序

    两个类,一个学生类,含姓名和出生日期两个属性:还有一个学生排序类,重写compare函数,自定义排序规则是先比较出生日期,如果相同再比较姓名字母 package birthday; import ja ...

  5. java编程排序之自定义类型的集合,按业务需求排序

    自定义引用类型放入集合中,按实际业务需求进行排序的两种思路 第一种思路: (1)自定义实体类实现java.lang.Comparable接口,重写public int compareTo(Object ...

  6. java编程排序之内置引用类型的排序规则实现,和自定义规则实现+冒泡排序运用

    第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. /** * 最原始的冒泡排序. * 效率低. * 因为趟数和次数最多.都是按最大化的循环次数进 ...

  7. JAVA 使用Comparator接口实现自定义排序

    1.原则 Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法: int compare(Object o1, Object o2) 返回一个基本类型的 ...

  8. java自定义类型 比较排序 Comparator接口

    String service_time = "6:00:00,7:00:00,8:00:00,9:00:00,10:00:00,11:00:00,12:00:00,13:00:00,14:0 ...

  9. Java 中HashTable、HashMap、TreeMap三者区别,以及自定义对象是否相同比较,自定义排序等

    /* Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.效率低.基本已废 ...

  10. LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)

    题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词.   示例 1: 输入: s = "anagram", t = "nagaram& ...

随机推荐

  1. Dart 2.18 正式发布

    互操作性增强.平台特定的网络组件.优化类型推断,以及空安全语言里程碑的近期更新 文/ Michael Thomsen, Google Flutter & Dart 产品经理 Dart 2.18 ...

  2. 【微服务】Nacos初体验

    SpringCloud - Nacos初体验 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

  3. 【gRPC】C++异步服务端优化版,多服务接口样例

    官方的C++异步服务端API样例可读性并不好,理解起来非常的费劲,各种状态机也并不明了,整个运行过程也容易读不懂,因此此处参考网上的博客进行了重写,以求顺利读懂. C++异步服务端实例,详细注释版 g ...

  4. 连接Vue.js作为前端,Fastapi作为后端

    项目结构 ├── main.py └── templates └── home.html 环境安装 pip install fastapi[all] pip install jinja2 Backen ...

  5. logstash处理字段样例

  6. sql语句的组成

    数据定义语言(DDL,Data Definition Language):包括CREATE(创建)ALTER(修改)DROP(删除)等. 数据操纵语言(DML,Data Manipulation La ...

  7. Docker | 容器数据卷详解

    什么是容器数据卷 从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了. 如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化 My ...

  8. KMP模式匹配 学习笔记

    功能 能在线性时间内判断字符串\(A[1~N]\)是否为字符串\(B[1~M]\)的子串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置. 实现 1.对字符串\(A\)进行自我"匹 ...

  9. Go_gin权限验证

    权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库. 1. 特征 Casbin的作用: 以经典{subject, object, action}形式或您定义的自定义形式实施策 ...

  10. 2022-08-21-Freewind主题_cdn替换版

    layout: post cid: 16 title: Freewind主题 cdn替换版 slug: 16 date: 2022/08/21 14:06:00 updated: 2022/08/21 ...