文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java数组排序,升序和降序

2023-10-25 15:39

关注

文章目录

前言

对于数组的排序一直很疑惑,尤其是如何对数组进行降序排列,例如要对int[]类型的数组降序排列,这里来进行说明

基本数据类型排序

升序

int[] nums = {4, 3, 5, 2, 6, 1,7};

如果我们要对上面代码进行升序排列,我们只需要调用Arrays.sort的方法即可

在这里插入图片描述
将数组传入即可,支持基本数据类型,这个sort就会对数组进行排序

Arrays.sort(nums);

排序后输出结果如下

[1, 2, 3, 4, 5, 6, 7]

降序排列

对于基本数据类型,并没有现成的api,但是我们可以将排序后的数组进行翻转

        int[] nums = {4, 3, 5, 2, 6, 1,7};        Arrays.sort(nums);        // 翻转数组        for (int i = 0; i < nums.length / 2; i++) {            int t = nums[i];            nums[i] = nums[nums.length - i - 1];            nums[nums.length - i - 1] = t;        }        System.out.println(Arrays.toString(nums));

输出结果如下

[7, 6, 5, 4, 3, 2, 1]

基本数据类型包装类

升序

用基本数据类型的包装类来进行升序排列调用Aarrays.sort即可

Integer[] nums = {4, 3, 5, 2, 6, 1,7};        Arrays.sort(nums);        System.out.println(Arrays.toString(nums));

降序

如果要降序排列,在sort后面传入一个Comparator接口即可,下面我使用的是lambda表达式,如果是o1-o2表示升序,o2-o1表示降序,具体的在下面的对象排序里面讲

Integer[] nums = {4, 3, 5, 2, 6, 1, 7};        Arrays.sort(nums, (o1, o2) -> o2 - o1);        System.out.println(Arrays.toString(nums));

输出内容如下

[7, 6, 5, 4, 3, 2, 1]

对象排序

升序

下面是我自定义的一个Cat类

class Cat {    String name;    int age;    public Cat(String name, int age) {        this.name = name;        this.age = age;    }        @Override    public String toString() {        return "Cat{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}

初始的Cat类数组如下

        Cat[] cats = {                new Cat("大黄", 2),                new Cat("小黑",1),                new Cat("旺财", 3),                new Cat("大黑", 4)        };

该数组没排序前输出如下

Cat{name='大黄', age=2}Cat{name='小黑', age=1}Cat{name='旺财', age=3}Cat{name='大黑', age=4}

下面我想对年龄进行排序,我们使用的也是Arrays.sort

在这里插入图片描述
我们需要传入一个Comparator,new一个,实现里面的compare方法即可,sort会根据compare返回的值来进行排序,如果返回负数就会将前面个值放到前面

Arrays.sort(cats, new Comparator<Cat>() {            @Override            public int compare(Cat cat1, Cat cat2) {                return cat1.age - cat2.age;            }        });

或者使用lambda表达式

Arrays.sort(cats, (cat1, cat2) -> cat1.age - cat2.age);

也可以写成下面这种写法

Arrays.sort(cats, Comparator.comparingInt(cat -> cat.age));

最后的一种写法就表示使用Cat的age属性来进行比较,三种写法输出结果都是升序排列的,如下

Cat{name='小黑', age=1}Cat{name='大黄', age=2}Cat{name='旺财', age=3}Cat{name='大黑', age=4}

降序

会升序排列了,降序就是将compare的结果变成相反就行了

        Arrays.sort(cats, new Comparator<Cat>() {            @Override            public int compare(Cat cat1, Cat cat2) {                return cat2.age - cat1.age;            }        });

lambda写法如下

Arrays.sort(cats, (cat1, cat2) -> cat2.age - cat1.age);

我们也可以这样写

Arrays.sort(cats, Comparator.comparingInt(cat -> -cat.age));

输出结果都是降序排列的

Cat{name='大黑', age=4}Cat{name='旺财', age=3}Cat{name='大黄', age=2}Cat{name='小黑', age=1}

来源地址:https://blog.csdn.net/m0_51545690/article/details/129152505

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯