詳解Java sort()數(shù)組排序(升序和降序)
我們?cè)趯W(xué)習(xí) Java 的過(guò)程中肯定會(huì)遇到對(duì)數(shù)組進(jìn)行升序或降序等排序問(wèn)題,本節(jié)主要介紹如何實(shí)現(xiàn) Java 數(shù)組的升序和降序。Java 語(yǔ)言使用 Arrays 類(lèi)提供的 sort() 方法來(lái)對(duì)數(shù)組進(jìn)行排序。
升序
使用 java.util.Arrays 類(lèi)中的 sort() 方法對(duì)數(shù)組進(jìn)行升序分為以下兩步:
- 導(dǎo)入 java.util.Arrays 包。
- 使用 Arrays.sort(數(shù)組名) 語(yǔ)法對(duì)數(shù)組進(jìn)行排序,排序規(guī)則是從小到大,即升序。
假設(shè)在數(shù)組 scores 中存放了 5 名學(xué)生的成績(jī),現(xiàn)在要實(shí)現(xiàn)從低到高排列的功能。在這里使用 Arrays.sort() 方法來(lái)實(shí)現(xiàn),具體代碼如下:
public static void main(String[] args) {
// 定義含有5個(gè)元素的數(shù)組
double[] scores = new double[] { 78, 45, 85, 97, 87 };
System.out.println("排序前數(shù)組內(nèi)容如下:");
// 對(duì)scores數(shù)組進(jìn)行循環(huán)遍歷
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "\t");
}
System.out.println("\n排序后的數(shù)組內(nèi)容如下:");
// 對(duì)數(shù)組進(jìn)行排序
Arrays.sort(scores);
// 遍歷排序后的數(shù)組
for (int j = 0; j < scores.length; j++) {
System.out.print(scores[j] + "\t");
}
}
如上述代碼所示,要對(duì)一個(gè)數(shù)組進(jìn)行升序排列,只需要調(diào)用 Arrays.sort() 方法即可。運(yùn)行后的輸出結(jié)果如下所示。
排序前數(shù)組內(nèi)容如下:
78.0 45.0 85.0 97.0 87.0
排序后的數(shù)組內(nèi)容如下:
45.0 78.0 85.0 87.0 97.0
降序
在 Java 語(yǔ)言中使用 sort 實(shí)現(xiàn)降序有兩種方法,簡(jiǎn)單了解即可。
1)利用 Collections.reverseOrder() 方法(Collections 是一個(gè)包裝類(lèi)。大家可以學(xué)習(xí)《Java Collections類(lèi)》一節(jié)詳細(xì)了解):
public static void main(String[] args) {
Integer[] a = { 9, 8, 7, 2, 3, 4, 1, 0, 6, 5 }; // 數(shù)組類(lèi)型為Integer
Arrays.sort(a, Collections.reverseOrder());
for (int arr : a) {
System.out.print(arr + " ");
}
}
輸出結(jié)果如下:
9 8 7 6 5 4 3 2 1 0
2)實(shí)現(xiàn) Comparator 接口的復(fù)寫(xiě) compare() 方法,代碼如下:
public class Test {
public static void main(String[] args) {
/*
* 注意,要想改變默認(rèn)的排列順序,不能使用基本類(lèi)型(int,double,char)而要使用它們對(duì)應(yīng)的類(lèi)
*/
Integer[] a = { 9, 8, 7, 2, 3, 4, 1, 0, 6, 5 };
// 定義一個(gè)自定義類(lèi)MyComparator的對(duì)象
Comparator cmp = new MyComparator();
Arrays.sort(a, cmp);
for (int arr : a) {
System.out.print(arr + " ");
}
}
}
// 實(shí)現(xiàn)Comparator接口
class MyComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
/*
* 如果o1小于o2,我們就返回正值,如果o1大于o2我們就返回負(fù)值, 這樣顛倒一下,就可以實(shí)現(xiàn)降序排序了,反之即可自定義升序排序了
*/
return o2 - o1;
}
}
輸出結(jié)果如下所示。
9 8 7 6 5 4 3 2 1 0
注意:使用以上兩種方法時(shí),數(shù)組必須是包裝類(lèi)型,否則會(huì)編譯不通過(guò)。
在 Java 中實(shí)現(xiàn)數(shù)組排序的方式很多,除了利用以上的幾種方法外,還可以編寫(xiě)自定義方法來(lái)實(shí)現(xiàn)自己的排序算法,有興趣的讀者可以嘗試編寫(xiě)。
Java排序方法sort的使用詳解
對(duì)數(shù)組的排序:
//對(duì)數(shù)組排序
public void arraySort(){
int[] arr = {1,4,6,333,8,2};
Arrays.sort(arr);//使用java.util.Arrays對(duì)象的sort方法
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
對(duì)集合的排序:
//對(duì)list升序排序
public void listSort1(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(55);
list.add(9);
list.add(0);
list.add(2);
Collections.sort(list);//使用Collections的sort方法
for(int a :list){
System.out.println(a);
}
}
//對(duì)list降序排序
public void listSort2(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(55);
list.add(9);
list.add(0);
list.add(2);
Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});//使用Collections的sort方法,并且重寫(xiě)compare方法
for(int a :list){
System.out.println(a);
}
}
到此這篇關(guān)于詳解Java sort()數(shù)組排序(升序和降序)的文章就介紹到這了,更多相關(guān)Java sort()數(shù)組排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
時(shí)間處理函數(shù)工具分享(時(shí)間戳計(jì)算)
這篇文章主要介紹了時(shí)間處理函數(shù)工具,包括得到時(shí)間戳、周一、周末、時(shí)間更改、時(shí)間精確計(jì)算等功能2014-01-01
Java 14 發(fā)布了,你還會(huì)使用Lombok?
2020年3月17日發(fā)布,Java正式發(fā)布了JDK 14 ,目前已經(jīng)可以開(kāi)放下載。在JDK 14中,共有16個(gè)新特性,本文主要來(lái)介紹其中的一個(gè)特性:JEP 359: Records,需要的朋友可以參考下2020-04-04
SpringBoot中@EnableAsync和@Async注解的使用小結(jié)
在SpringBoot中,可以通過(guò)@EnableAsync注解來(lái)啟動(dòng)異步方法調(diào)用的支持,通過(guò)@Async注解來(lái)標(biāo)識(shí)異步方法,讓方法能夠在異步線程中執(zhí)行,本文就來(lái)介紹一下,感興趣的可以了解一下2023-11-11
ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例
這篇文章主要介紹了Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例,迭代器模式能夠?qū)υL問(wèn)者隱藏對(duì)象的內(nèi)部細(xì)節(jié),需要的朋友可以參考下2016-05-05
java面試常見(jiàn)模式問(wèn)題---代理模式
代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類(lèi)與委托類(lèi)有同樣的接口,代理類(lèi)主要負(fù)責(zé)為委托類(lèi)預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類(lèi),以及事后處理消息2021-06-06
SpringBoot實(shí)現(xiàn)接口等冪次校驗(yàn)的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)接口等冪次校驗(yàn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

