最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Comparator與Comparable排序的區(qū)別詳解

 更新時(shí)間:2024年01月17日 11:24:22   作者:霸道流氓氣質(zhì)  
這篇文章主要介紹了Java中Comparator與Comparable排序的區(qū)別詳解,如果你有一個(gè)類,希望支持同類型的自定義比較策略,可以實(shí)現(xiàn)接口Comparable,如果某個(gè)類,沒有實(shí)現(xiàn)Comparable,但是又希望對(duì)它進(jìn)行比較,則可以自定義一個(gè)Comparator,需要的朋友可以參考下

場(chǎng)景

java中進(jìn)行排序比較時(shí)Comparator與Comparable區(qū)別:

如果你有一個(gè)類,希望支持同類型的自定義比較策略,可以實(shí)現(xiàn)接口Comparable

如果某個(gè)類,沒有實(shí)現(xiàn)Comparable,但是又希望對(duì)它進(jìn)行比較,則可以自定義一個(gè)Comparator,來定義這個(gè)類的比較規(guī)則

使用Comparable進(jìn)行排序比較

新建類CompareDemo,并添加code和age屬性,該類實(shí)現(xiàn)Comparable接口

并重新compareTo方法

public class CompareDemo implements Comparable<CompareDemo>{
    int code;
    int age;
    public CompareDemo(int code, int age) {
        this.code = code;
        this.age = age;
    }
    @Override
    public int compareTo(CompareDemo o) {
        if(code == o.code){
            return 0;
        }else if(code<o.code){
            return -1;
        }else{
            return 0;
        }
    }
}

進(jìn)行排序比較,默認(rèn)根據(jù)code進(jìn)行升序比較

List<CompareDemo> list = new ArrayList<CompareDemo>(){{
    add(new CompareDemo(10,20));
    add(new CompareDemo(12,30));
    add(new CompareDemo(11,10));
}};
list.forEach(compareDemo -> System.out.println(compareDemo.code));
//默認(rèn)根據(jù)code進(jìn)行升序比較
list.sort(null);
list.forEach(compareDemo -> System.out.println(compareDemo.code));

如果現(xiàn)在需求變了,希望針對(duì)age字段,進(jìn)行升序排序,那么就可以利用Comparator實(shí)現(xiàn)。

使用Comparator進(jìn)行排序

list.sort(new Comparator<CompareDemo>() {
    @Override
    public int compare(CompareDemo o1, CompareDemo o2) {
        if (o1.age == o2.age) {
            return 0;
        } else if (o1.age < o2.age) {
            return -1;
        } else {
            return 1;
        }
    }
});
list.forEach(compareDemo -> System.out.println(compareDemo.age));

上面的排序可以簡(jiǎn)化為

list.sort(new Comparator<CompareDemo>() {
    @Override
    public int compare(CompareDemo o1, CompareDemo o2) {
        return Integer.compare(o1.age,o2.age);
    }
});

在JDK1.8中還可以更簡(jiǎn)化

list.sort(Comparator.comparingInt(o -> o.age));

如果希望倒序

list.sort(new Comparator<CompareDemo>() {
    @Override
    public int compare(CompareDemo o1, CompareDemo o2) {
        return Integer.compare(o2.age,o1.age);
    }
});

在jdk1.8中,使用負(fù)數(shù)

list.sort(Comparator.comparingInt(o->-o.age));
list.forEach(compareDemo -> System.out.println(compareDemo.age));

到此這篇關(guān)于Java中Comparator與Comparable排序的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Comparator與Comparable區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot 自定義校驗(yàn)代碼實(shí)例

    Springboot 自定義校驗(yàn)代碼實(shí)例

    這篇文章主要介紹了Springboot 自定義校驗(yàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java設(shè)計(jì)模式中的策略模式詳細(xì)解析

    Java設(shè)計(jì)模式中的策略模式詳細(xì)解析

    這篇文章主要介紹了Java設(shè)計(jì)模式中的策略模式詳細(xì)解析,所謂策略模式,指的是做某一件事時(shí)有多種選擇(即策略),且不同的策略之間相互獨(dú)立,而且無論使用哪種策略,得到的結(jié)果都是相同的,需要的朋友可以參考下
    2023-12-12
  • java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

    java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

    這篇文章主要介紹了 java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例

    JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例

    這篇文章主要介紹了JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java泛化調(diào)用實(shí)現(xiàn)原理解析

    Java泛化調(diào)用實(shí)現(xiàn)原理解析

    泛化調(diào)用指的是不依賴服務(wù)接口的本地?stub?或代理類,通過統(tǒng)一的參數(shù)結(jié)構(gòu)動(dòng)態(tài)調(diào)用遠(yuǎn)程服務(wù)方法,本文介紹Java泛化調(diào)用實(shí)現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java實(shí)現(xiàn)二分法變種的示例代碼

    Java實(shí)現(xiàn)二分法變種的示例代碼

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)二分法變種的示例代碼復(fù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • spring @Scheduled注解的使用誤區(qū)及解決

    spring @Scheduled注解的使用誤區(qū)及解決

    這篇文章主要介紹了spring @Scheduled注解的使用誤區(qū)及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot中的Shiro基礎(chǔ)入門教程

    Springboot中的Shiro基礎(chǔ)入門教程

    Apache Shiro是一個(gè)強(qiáng)大且靈活的開源安全框架,適用于Java應(yīng)用程序,它提供了認(rèn)證、授權(quán)、會(huì)話管理和加密等功能,通過Shiro,開發(fā)者可以輕松地實(shí)現(xiàn)用戶身份驗(yàn)證和權(quán)限控制,從而保護(hù)應(yīng)用程序的安全,本文介紹Springboot中的Shiro基礎(chǔ)入門教程,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 利用ScriptEngineManager實(shí)現(xiàn)字符串公式靈活計(jì)算的方法

    利用ScriptEngineManager實(shí)現(xiàn)字符串公式靈活計(jì)算的方法

    今天小編就為大家分享一篇利用ScriptEngineManager實(shí)現(xiàn)字符串公式靈活計(jì)算的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁(yè)面

    詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁(yè)面

    本篇文章主要介紹了springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁(yè)面,session一旦失效就需要重新登陸,有興趣的同學(xué)可以了解一下。
    2017-01-01

最新評(píng)論

永仁县| 琼中| 黑龙江省| 宁陵县| 康乐县| 漳浦县| 凤台县| 都昌县| 鄂尔多斯市| 广德县| 台中县| 乐陵市| 贺兰县| 来安县| 临海市| 新巴尔虎右旗| 文化| 铜鼓县| 岳西县| 钟山县| 连云港市| 无锡市| 沐川县| 鲁甸县| 隆尧县| 拜泉县| 得荣县| 大理市| 鹤壁市| 广平县| 临清市| 白玉县| 河南省| 潍坊市| 洞头县| 余干县| 祁东县| 巢湖市| 翼城县| 漳平市| 阿荣旗|