java数组排序,升序和降序

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 java数组排序,升序和降序,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言

对于数组的排序一直很疑惑,尤其是如何对数组进行降序排列,例如要对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://www.bmabk.com/index.php/post/146263.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!