前言
對(duì)于數(shù)組的排序一直很疑惑,尤其是如何對(duì)數(shù)組進(jìn)行降序排列,例如要對(duì)int[]類型的數(shù)組降序排列,這里來進(jìn)行說明
基本數(shù)據(jù)類型排序
升序
int[] nums = {4, 3, 5, 2, 6, 1,7};
如果我們要對(duì)上面代碼進(jìn)行升序排列,我們只需要調(diào)用Arrays.sort的方法即可
將數(shù)組傳入即可,支持基本數(shù)據(jù)類型,這個(gè)sort就會(huì)對(duì)數(shù)組進(jìn)行排序
Arrays.sort(nums);
排序后輸出結(jié)果如下
[1, 2, 3, 4, 5, 6, 7]
降序排列
對(duì)于基本數(shù)據(jù)類型,并沒有現(xiàn)成的api,但是我們可以將排序后的數(shù)組進(jìn)行翻轉(zhuǎn)
int[] nums = {4, 3, 5, 2, 6, 1,7};
Arrays.sort(nums);
// 翻轉(zhuǎn)數(shù)組
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));
輸出結(jié)果如下
[7, 6, 5, 4, 3, 2, 1]
基本數(shù)據(jù)類型包裝類
升序
用基本數(shù)據(jù)類型的包裝類來進(jìn)行升序排列調(diào)用Aarrays.sort即可
Integer[] nums = {4, 3, 5, 2, 6, 1,7};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
降序
如果要降序排列,在sort后面?zhèn)魅胍粋€(gè)Comparator接口即可,下面我使用的是lambda表達(dá)式,如果是o1-o2表示升序,o2-o1表示降序,具體的在下面的對(duì)象排序里面講
Integer[] nums = {4, 3, 5, 2, 6, 1, 7};
Arrays.sort(nums, (o1, o2) -> o2 - o1);
System.out.println(Arrays.toString(nums));
輸出內(nèi)容如下
[7, 6, 5, 4, 3, 2, 1]
對(duì)象排序
升序
下面是我自定義的一個(gè)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類數(shù)組如下
Cat[] cats = {
new Cat("大黃", 2),
new Cat("小黑",1),
new Cat("旺財(cái)", 3),
new Cat("大黑", 4)
};
該數(shù)組沒排序前輸出如下
Cat{name='大黃', age=2}
Cat{name='小黑', age=1}
Cat{name='旺財(cái)', age=3}
Cat{name='大黑', age=4}
下面我想對(duì)年齡進(jìn)行排序,我們使用的也是Arrays.sort
我們需要傳入一個(gè)Comparator,new一個(gè),實(shí)現(xiàn)里面的compare方法即可,sort會(huì)根據(jù)compare返回的值來進(jìn)行排序,如果返回負(fù)數(shù)就會(huì)將前面?zhèn)€值放到前面
Arrays.sort(cats, new Comparator<Cat>() {
@Override
public int compare(Cat cat1, Cat cat2) {
return cat1.age - cat2.age;
}
});
或者使用lambda表達(dá)式
Arrays.sort(cats, (cat1, cat2) -> cat1.age - cat2.age);
也可以寫成下面這種寫法
Arrays.sort(cats, Comparator.comparingInt(cat -> cat.age));
最后的一種寫法就表示使用Cat的age屬性來進(jìn)行比較,三種寫法輸出結(jié)果都是升序排列的,如下
Cat{name='小黑', age=1}
Cat{name='大黃', age=2}
Cat{name='旺財(cái)', age=3}
Cat{name='大黑', age=4}
降序
會(huì)升序排列了,降序就是將compare的結(jié)果變成相反就行了
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);
我們也可以這樣寫文章來源:http://www.zghlxwxcb.cn/news/detail-412627.html
Arrays.sort(cats, Comparator.comparingInt(cat -> -cat.age));
輸出結(jié)果都是降序排列的文章來源地址http://www.zghlxwxcb.cn/news/detail-412627.html
Cat{name='大黑', age=4}
Cat{name='旺財(cái)', age=3}
Cat{name='大黃', age=2}
Cat{name='小黑', age=1}
到了這里,關(guān)于java數(shù)組排序,升序和降序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!