Java中Arrays.sort()方法的比較器詳解
Arrays.sort()方法的比較器
Arrays.sort()有以下重載(此處只展示兩種):
- Arrays.sort(Object[] a);
- Arrays.sort(T[] a, Comparator<? super T> c);
Arrays.sort(Object[] a)
此方法看似沒有要求我們實(shí)現(xiàn)比較器,對(duì)于基本數(shù)據(jù)類型,String類型確實(shí)如此,因?yàn)檫@些類型中已經(jīng)自帶了compareTo()方法
然而對(duì)于我們自定義的類型,則需要讓該類實(shí)現(xiàn)Comparable接口,重寫其中的compareTo()函數(shù)
否則雖然編譯時(shí)不會(huì)報(bào)錯(cuò),但是在運(yùn)行時(shí)會(huì)出現(xiàn)ClassCastException的異常
Arrays.sort(T[] a, Comparator<? super T> c)
此方法的第二個(gè)參數(shù)c則明確地要求我們傳入一個(gè)實(shí)現(xiàn)了java.util.Comparator接口的實(shí)例,而Comparator接口中聲明了compare()的抽象方法,所以我們需要重寫compare()方法
可以有以下幾種方法
1、定義一個(gè)實(shí)現(xiàn)了Comparator接口的類,用該類生成一個(gè)實(shí)例作為參數(shù)
package com.demo import java.util.Comparator; public class LengthOfString implements Comparator<String>{ @Override public int compare(String first, String second){ return first.length() - second.length(); } public static void main(String[] args){ String[] ss = {"aa","AAA","a","aaaaaa"}; Arrays.sort(ss,new LengthOfString()); for(String s : ss){ System.out.println(s); } } }
2、由于Comparator接口只聲明了一個(gè)compare()方法,可以使用匿名內(nèi)部類的方式實(shí)現(xiàn)排序
String[] ss = {"aa","AAA","a","aaaaaa"}; Arrays.sort(ss, new Comparator<string>)String[] ss = {"aa","AAA","a","aaaaaa"}; Arrays.sort(ss, new Comparator<string>(){ @Override public int compare(String first, String second){ return first.length() - second.length(); } }); for(String s : ss){ System.out.println(s); }
3、使用Lambda表達(dá)式
Arrays.sort(ss, (String a,String b)->{ return b.compareTo(a);//String類中定義了compareTO()方法,不需要自己實(shí)現(xiàn) });
由于只有一行代碼,故可以省略寫成
Arrays.sort(ss, (String a,String b) -> b.compareTo(a));
到此這篇關(guān)于Java中Arrays.sort()方法的比較器詳解的文章就介紹到這了,更多相關(guān)Arrays.sort()方法的比較器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中ByteArrayInputStream和ByteArrayOutputStream用法詳解
這篇文章主要介紹了Java中ByteArrayInputStream和ByteArrayOutputStream用法詳解,?ByteArrayInputStream?的內(nèi)部額外的定義了一個(gè)計(jì)數(shù)器,它被用來跟蹤?read()?方法要讀取的下一個(gè)字節(jié)2022-06-06Spring Boot 中嵌入式 Servlet 容器自動(dòng)配置原理解析
這篇文章主要介紹了Spring Boot 中嵌入式 Servlet 容器自動(dòng)配置原理解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java21增強(qiáng)對(duì)Emoji表情符號(hào)處理示例詳解
這篇文章主要為大家介紹了Java21增強(qiáng)對(duì)Emoji表情符號(hào)處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Java實(shí)現(xiàn)隨機(jī)出題,10道10以內(nèi)加減法計(jì)算代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)隨機(jī)出題,10道10以內(nèi)加減法計(jì)算,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04淺談java繼承中是否創(chuàng)建父類對(duì)象
下面小編就為大家?guī)硪黄獪\談java繼承中是否創(chuàng)建父類對(duì)象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Spring?BOOT?AOP基礎(chǔ)應(yīng)用教程
這篇文章主要介紹了Spring?BOOT?AOP的使用,文章從相關(guān)問題展開全文內(nèi)容詳情,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07深入理解Java8新特性之Stream API的創(chuàng)建方式和中間操作步驟
Stream是Java8的一大亮點(diǎn),是對(duì)容器對(duì)象功能的增強(qiáng),它專注于對(duì)容器對(duì)象進(jìn)行各種非常便利、高效的 聚合操作(aggregate operation)或者大批量數(shù)據(jù)操作。Stream API借助于同樣新出現(xiàn)的Lambda表達(dá)式,極大的提高編程效率和程序可讀性,感興趣的朋友快來看看吧2021-11-11