使用重写的方式进行一维数组/列表降序排列和二维/数组列表排序

1.一维数组降序排列(一维数组的类型不能为基本数据类型,应该将其转为它的包装类,再进行重写

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {

        int[] nums1= {2,9,2,45,-3,6};
        Integer[] nums2=new Integer[nums1.length];
        for(int i=0;i<nums1.length;i++) {
            nums2[i]=(Integer)nums1[i];
        }

        //Arrays.sort() 默认升序排序

        //重写法一:
        //		Arrays.sort(nums2, new Comparator<Integer>() {
        //		    @Override
        //		    public int compare(Integer o1, Integer o2) {
        //		        return o2 - o1;
        //		    }
        //		});

        //重写法二:
        Arrays.sort(nums2,(o1,o2)->(o2-o1));

        //降序输出
        System.out.println(Arrays.toString(nums2));  //[45, 9, 6, 2, 2, -3]


    }

}

2.一维列表降序排列

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Main{
    public static void main(String[] args){

        List<Integer> elem=new ArrayList<>();
        elem.add(1);
        elem.add(5);
        elem.add(2);

        //Collections.sort() 默认升序排序   

        //升序
        Collections.sort(elem);
        //Collections.sort(elem,(o1,o2)->(o1-o2));
        System.out.println(elem);  //[1, 2, 5]

        //降序
        Collections.sort(elem,(o1,o2)->(o2-o1));
        System.out.println(elem);  //[5, 2, 1]


    }
}

3.二维数组排列

例:根据排序intervals数组元素的的0位元素大小排序

法一:冒泡排序(用时较少)

//根据排序intervals数组元素的的0位元素大小排序
int[] temp;
for(int i=0;i<intervals.length;i++) {
    for(int j=0;j<intervals.length-i-1;j++) {

        if(intervals[j][0]>intervals[j+1][0]) {
            temp=intervals[j];
            intervals[j]=intervals[j+1];
            intervals[j+1]=temp;
        }

    }
}

法二:使用Arrays结合lambda表达式排序(用时较短)

import java.util.Arrays;
import java.util.Comparator;
public class Main {
    public static void main(String[] args) {

        int[][] intervals = {{2,6},{15,18},{1,3},{3,10}};

        //根据排序intervals数组元素的的0位元素大小排序

        //重写法一:
        //Arrays.sort(intervals, (o1,o2) -> Integer.compare(o1[0],o2[0]) );   //升序:[[1, 3], [2, 6], [3, 10], [15, 18]]
        //Arrays.sort(intervals, (o1,o2) -> Integer.compare(o2[0],o1[0]) );   //降序:[[15, 18], [3, 10], [2, 6], [1, 3]]

        //重写法二:
        Arrays.sort(intervals, (o1,o2) -> (o1[0]-o2[0]) );   //升序:[[1, 3], [2, 6], [3, 10], [15, 18]]
        Arrays.sort(intervals, (o1,o2) -> (o2[0]-o1[0]) );   //降序:[[15, 18], [3, 10], [2, 6], [1, 3]]

        System.out.println(Arrays.deepToString(intervals));  //[[1, 3], [2, 6], [3, 10], [15, 18]]

    }

}


4、二维列表排序

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Main{
    public static void main(String[] args){
        List<Integer> elem1=new ArrayList<>();
        elem1.add(1);
        elem1.add(5);
        elem1.add(2);
        List<Integer> elem2=new ArrayList<>();
        elem2.add(6);
        elem2.add(4);
        List<Integer> elem3=new ArrayList<>();
        elem3.add(3);
        elem3.add(8);
        elem3.add(3);
        List<Integer> elem4=new ArrayList<>();
        elem4.add(12);
        elem4.add(3);
        Collections.sort(elem1,(o1,o2)->(o1-o2));

        List<List<Integer>> list=new ArrayList<>();
        list.add(elem1);
        list.add(elem2);
        list.add(elem3);
        list.add(elem4);

        //根据子列表的0位元素大小排序
        //升序
        Collections.sort(list,(o1,o2)->(o1.get(0)-o2.get(0)));
        System.out.println(list);   //[[1, 2, 5], [3, 8, 3], [6, 4], [12, 3]]
        //或
        Collections.sort(list,(o1,o2)->(o1.get(0).compareTo(o2.get(0))));
        System.out.println(list);  //[[1, 2, 5], [3, 8, 3], [6, 4], [12, 3]]

        //降序
        Collections.sort(list,(o1,o2)->(o2.get(0)-o1.get(0)));
        System.out.println(list);  //[[12, 3], [6, 4], [3, 8, 3], [1, 2, 5]]
        //或 
        Collections.sort(list,(o1,o2)->(o2.get(0).compareTo(o1.get(0))));
        System.out.println(list);  //[[12, 3], [6, 4], [3, 8, 3], [1, 2, 5]]


    }
}


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

itmengge

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

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

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

打赏作者

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

抵扣说明:

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

余额充值