实现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. 【面试题】js 问号(?)的强大之处,你知道吗??

    问号(?)的强大之处 点击打开视频讲解更加详细 一.问号点(?.) obj: { name: "末晨曦吖", }, console.log(this.obj.age, " ...

  2. ubuntu下安装python

    一.安装python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6 如显示不能添加"'ppa:~jonathonf/ubuntu/p ...

  3. 集成 Redis & 异步任务 - SpringBoot 2.7 .2实战基础

    SpringBoot 2.7 .2实战基础 - 09 - 集成 Redis & 异步任务 1 集成Redis <docker 安装 MySQL 和 Redis>一文已介绍如何在 D ...

  4. Nginx超时问题解决

    在 nginx.conf 中配置以下内容 ... http { ... server { # 这里表示upstream 的连接.读取.发送超时时间都是300秒 proxy_connect_timeou ...

  5. spark 读取hive 计算后写入hive

    package com.grady import org.apache.spark.SparkConf import org.apache.spark.sql.{DataFrame, Row, Spa ...

  6. KubePi主界面添加镜像仓库并授权给集群,供创建Deployment时选择镜像使用

    1.添加kubeoperator自带的nexus仓库 2.添加harbor 3.把添加的镜像仓库授权给集群 4.关于镜像仓库secrets的有关说明 5.实际效果 6.从添加授权的镜像仓库创建工作负载 ...

  7. ProxySQL(9):ProxySQL的查询缓存功能

    文章转载自: https://www.cnblogs.com/f-ck-need-u/p/9314459.html ProxySQL支持查询缓存的功能,可以将后端返回的结果集缓存在自己的内存中,在某查 ...

  8. Kubernetes 控制器

    在实际使用的时候并不会直接使用 Pod,而是会使用各种控制器来满足我们的需求,Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes 的大脑. ...

  9. Traefik2.X 版本 中 URL Rewrite 的使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484594&idx=1&sn=becbe567 ...

  10. C#并发编程-4 同步

    如果程序用到了并发技术,那就要特别留意这种情况:一段代码需要修改数据,同时其他代码需要访问同一个数据. 这种情况就需要考虑同步地访问数据. 如果下面三个条件都满足,就必须用同步来保护共享的数据. 多段 ...