文章目录
前言
对于数组的排序一直很疑惑,尤其是如何对数组进行降序排列,例如要对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