java实用技巧总结-------sort排序

本文介绍了如何使用Comparator和Comparable接口在Java中实现自定义数组和自定义对象的排序,包括升序和降序,以及Collections类对List的排序,重点讲解了如何通过比较规则调整学号排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通数组排序
int[] array = {4,2,5,7,3,7,8};
Arrays.sort(array);//这种方法只能是升序
for(int num : array){
    System.out.print(num);
 }
 //若想要降序可以倒着输出
//for(int i=array.length-1;i >= 0;i--){
//    System.out.print(array[i]);
// }

输出
2 3 4 5 7 7 8

还可以指定排序的区间,具体如下
在这里插入图片描述

自定义类型排序

第一种用法缺陷很明显,只能是基本类型的比较且只能升序
这时我们用下面这种方法自己定义排序规则
首先我们先创建一个javabean类,这里没显示全
在这里插入图片描述
用Comparator内部类来规定我们的比较规则,这里比较的是学号,t1 - t2是升序,因为返回负数就不进行操作,返回正数就交换位置

Student s1 = new Student(123,"小钧");
Student s2 = new Student(352,"小王");
Student s3 = new Student(525,"小张");
Student[] students = {s2,s1,s3};
Arrays.sort(students,new Comparator<Student>(){
     @Override
     public int compare(Student t1, Student t2) {
          return t1.getNumber() - t2.getNumber();
          // t2 - t1则为倒叙
      }
});
for(Student s : students)
    System.out.println(s);

输出
Student{number=123, name=‘小钧’}
Student{number=352, name=‘小王’}
Student{number=525, name=‘小张’}

还有一种方法就是实现Comparable接口,但不建议用这种方法
,因为这是在类内部实现的,如果我们在不同情况比较的方法不同,情况就比内部类复杂的多

public class Student implements Comparable<Student>{
    @Override
    public int compareTo(Student student) {
        return this.number - student.number;
    }
}

调用方法为

Student s1 = new Student(123,"小钧");
Student s2 = new Student(352,"小王");
Student s3 = new Student(525,"小张");
Student[] students = {s2,s1,s3};
Arrays.sort(students);
for(Student s : students)
    System.out.println(s);
Collections类

先来看一下它可以对什么进行排序
在这里插入图片描述
可以看出Collections类只能对list进行排序
这里只说明Integer、String类,这些类都已经重写了Compare方法,都有默认排序规则。

  • 对于Integer类型会比较其包装的值类型大小
//升序排序
List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
Collections.sort(list);
System.out.println(list);

输出
[1, 3, 4, 5, 6, 9, 10]

//降序排序
List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
Collections.sort(list,Collections.reverseOrder());
System.out.println(list);

这里需要说明一下Arrays.asList()这个方法得到的List的长度是不可改变的。
如果你的List只是用来遍历,就用Arrays.asList()。
如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。

  • 对于String类型会以长度最小字符串为基准,逐一比较相同位置字符的ASCII码大小,如果都相同则比较字符串的长度。
List<String> list = new ArrayList<String>
(Arrays.asList("1234","1","12345","123"));
Collections.sort(list);
System.out.println(list);

输出
[1, 123, 1234, 12345]

最后推荐一道力扣题,看完的小伙伴可以去练练手
序号56(合并区间)
创作不易,觉得有用就点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钧11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值