Java sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

目录

前言:

一维数组降序:

方法1.Comparator接口:

代码实现:

方法2.Collections.reverseOrder():

代码实现: 

二维数组排序:

代码如下:

List<>排序:

代码如下:

自定义类型比较排序:

按照年龄逆序排序:

按照姓名升序排序:

lambda表达式简写:

一维数组逆序代码:

二维数组排序代码:

List<>排序代码:

自定义类型排序:

结语:


前言:

由于最近刷一些比赛真题时,发现有一些题要先排序一下后面才能用贪心之类的算法解决,在比赛上面自己实现一个排序算法有点浪费时间(当然不是指冒泡插入之类的简单排序,太慢了😭),考虑到java中Arrays类中有sort方法我们可以引用sort来排序,升序简单那降序呢,一维数组会排序那二维数组和List<>呢? 本文章就是为了解决这些问题,希望对友友有所帮助。💕💕💕

我相信来看这个的一般都是有急用吧😭😭😭(作者曾经也是),如果很急的话直接看代码实现,直接模仿着写即可,其他的都是一些知识点的讲解。

要想使用sort排序,排序的对象必须实现comparable接口才行,由于Comparable不太灵活故本文章不做详细介绍。

一位数组的基本类型sort方法都能排序(升序)。

可以说的是一维数组降序和二维数组排序都是通过如下sort的重载方法即传入一个比较器(参数是泛型的不能是基本类型)。

一维数组降序:

声明:为了方便叙述下面采用int和Integer进行叙述其他类似。

经过多次尝试和查阅许多资料得出:要想把一维数组逆序如果是基本类型的话要把它变成包装类,

基本类型实现不了。

方法1.Comparator接口:

实现Comparator接口可以说是最常用的一种自定义排序操作了,它比Comparable更加灵活,想要根据什么比较直接自己实现就行,下面我们就开始对它的介绍💕:

Comparator是一个接口,既然接口那么我们实现它必须要重写它的抽象方法compare必须要重写这一个(这个接口只有这一个方法)

如果不实现就是出现如下错误。 

 

实现比较器Comparator接口,上面< T >代表这是一个泛型(如果对泛型还不是很了解的话也没关系我们可以先会用就行),注意:泛型只能接受类,所有的基本数据类型必须使用包装类!,这就代表了我们要实现一维数组的逆序必须要把基本类型换成其包装类才行。否则会报如下错误。

代码实现:

import java.util.Arrays;
import java.util.Comparator;
class cmp implements Comparator<Integer>{
    @Override
    public int compare(Integer o1,Integer o2){
        return o2 - o1;
    }
}
public class Test1 {
    public static void main(String[] args) {
        Integer[] nums = {1,2,3,4,5};
        Arrays.sort(nums,new cmp());
        for(int i = 0;i < nums.length;i++){
            System.out.print(nums[i] + " ");
        }
    }
}

效果如下:

如果想要升序的话就 o1 - o2.  

方法2.Collections.reverseOrder():

 这个我是从别人那里看到的,因为这个好像整洁一点故也把他写进来(还是推荐Comparator

),源码如下,我们可以看到其实是传入一个比较器(Comparator)。注意要importCollections这个类。其源代码如下图。

评论 125
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值