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

Java語言的Comparable和Comparator區(qū)別

 更新時間:2023年06月19日 10:51:33   作者:葉晨爍  
這篇文章主要介紹了Java語言的Comparable和Comparator區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Java的Comparable和Comparator

當(dāng)我們使用自定義 Java 對象執(zhí)行比較時,我們可以使用ComparableComparator接口。

1.Java可比對象

Comparable接口對實現(xiàn)它的每個類的對象強加了總體排序。 此排序稱為類的自然排序。 該類的compareTo()方法必須實現(xiàn)以提供自然的比較。

2.Java比較器

Comparator接口對某些對象集合強加了整體排序。 可以將比較器傳遞給排序方法(例如Collections.sort()Arrays.sort()),以實現(xiàn)對排序順序的精確控制。 比較器還可以用于控制某些數(shù)據(jù)結(jié)構(gòu)(例如排序集或排序映射)的順序,或為沒有自然順序的對象集合提供排序。

3.可比對象和比較器

  • Java可比對象

    • 必須定義o1.compareTo(o2)
    • 用于實現(xiàn)對象的自然排序
    • 我們必須修改要對其實例進行排序的類
    • 在同一班
    • 只有一種實現(xiàn)
    • 在 API 中經(jīng)常通過以下方式實現(xiàn):字符串,包裝類,日期,日歷
  • Java比較器

    • 必須定義compare(o1, o2)
    • 比較類型的兩個實例的多種方法-例如 按年齡,姓名比較人
    • 我們可以為我們無法控制的類提供比較器
    • 我們可以有多個比較器的實現(xiàn)
    • 旨在實現(xiàn)對第三方類實例的排序

4.Java內(nèi)置比較器示例

public class JavaBuiltInComparator {
    public static void main(String[] args) {
        List<String> words = new ArrayList<>();
        words.add("dog");
        words.add("pen");
        words.add("sky");
        words.add("rock");
        words.add("den");
        words.add("fountain");
        words.sort(Comparator.naturalOrder());
        words.forEach(System.out::println);
        words.sort(Comparator.reverseOrder());
        words.forEach(System.out::println);
    }
}

Comparator.naturalOrder()返回內(nèi)置的自然順序Comparator。

words.sort(Comparator.naturalOrder());

Comparator.reverseOrder()返回一個比較器,該比較器強加自然順序。

words.sort(Comparator.reverseOrder());

Comparator.comparingInt()方法從提供的類型中提取 int 排序鍵,并通過該鍵進行比較。

class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    };
    public int getAge() {
        return this.age;
    }
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Person{");
        sb.append("name='").append(name).append('\'');
        sb.append(", age=").append(age);
        sb.append('}');
        return sb.toString();
    }
}
public class JavaBuiltInComparator2 {
    public static void main(String[] args) {
        Person p1 = new Person("Robert", 23);
        Person p2 = new Person("Monika", 18);
        Person p3 = new Person("Tom", 37);
        Person p4 = new Person("Elisabeth", 31);
        List<Person> vals = Arrays.asList( p1, p2, p3, p4 );
        vals.sort(Comparator.comparingInt(Person::getAge));
        vals.forEach(System.out::println);
    }
}

5.多個比較器

通過Comparator.thenComparing()方法,我們可以在對對象進行排序時使用多個比較器。

class Person {
    private String name;
    private int age;
    private String city;
    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Person{");
        sb.append("name='").append(name).append('\'');
        sb.append(", age=").append(age);
        sb.append(", city='").append(city).append('\'');
        sb.append('}');
        return sb.toString();
    }
}
public class JavaMultipleComparatorsEx {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person("Peter", 23, "New York"),
                new Person("Sarah", 13, "Las Vegas"),
                new Person("Lucy", 33, "Toronto"),
                new Person("Sarah", 21, "New York"),
                new Person("Tom", 18, "Toronto"),
                new Person("Robert", 23, "San Diego"),
                new Person("Lucy", 23, "Los Angeles"),
                new Person("Sam", 36, "Dallas"),
                new Person("Elisabeth", 31, "New York"),
                new Person("Ruth", 29, "New York"),
                new Person("Sarah", 41, "New York")
        );
        persons.sort(Comparator.comparing(Person::getName)
                .thenComparing(Person::getCity)
                .thenComparing(Person::getAge));
        persons.forEach(System.out::println);
    }
}

先按對象名稱比較對象,然后按城市比較對象,最后按年齡比較對象。

persons.sort(Comparator.comparing(Person::getName)
        .thenComparing(Person::getCity)
        .thenComparing(Person::getAge));

6.Java自定義比較器

public class JavaCustomComparatorEx {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("pen", "blue", "atom", "to",
                "ecclesiastical", "abbey", "car", "ten", "desk", "slim",
                "journey", "forest", "landscape", "achievement", "Antarctica");
        words.sort((e1, e2) -> e1.length() - e2.length());
        words.forEach(System.out::println);
        words.sort((e1, e2) ->  e2.length() - e1.length() );
        words.forEach(System.out::println);
    }
}

有一個單詞表。 根據(jù)單詞的長度對其進行比較。

words.sort((e1, e2) -> e1.length() - e2.length());

這個自定義比較器用于按單詞的大小按升序?qū)卧~進行排序。

words.sort((e1, e2) ->  e2.length() - e1.length() );

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

相關(guān)文章

  • 詳解spring cloud分布式日志鏈路跟蹤

    詳解spring cloud分布式日志鏈路跟蹤

    這篇文章主要介紹了詳解spring cloud分布式日志鏈路跟蹤,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot接收LocalDateTime參數(shù)的方式

    SpringBoot接收LocalDateTime參數(shù)的方式

    這篇文章主要介紹了SpringBoot接收LocalDateTime參數(shù)的方式,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 教你怎么用Java通過關(guān)鍵字修改pdf

    教你怎么用Java通過關(guān)鍵字修改pdf

    此方法只適合通過關(guān)鍵字位置,在pdf上添加字符直接上代碼,代碼比較長,大部分自己的理解都在代碼注釋中了,需要的朋友可以參考下
    2021-05-05
  • RestTemplate().postForEntity的參數(shù)使用及說明

    RestTemplate().postForEntity的參數(shù)使用及說明

    `RestTemplate().postForEntity()`是SpringFramework中用于發(fā)送HTTP POST請求并獲取響應(yīng)的方法,該方法接受目標URL、請求體、期望的響應(yīng)類型以及可選的變量參數(shù),并返回一個包含HTTP響應(yīng)信息的`ResponseEntity`對象
    2025-12-12
  • 一文精通Java 多線程之全方位解讀

    一文精通Java 多線程之全方位解讀

    Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù),多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷
    2021-10-10
  • Java基于動態(tài)規(guī)劃法實現(xiàn)求最長公共子序列及最長公共子字符串示例

    Java基于動態(tài)規(guī)劃法實現(xiàn)求最長公共子序列及最長公共子字符串示例

    這篇文章主要介紹了Java基于動態(tài)規(guī)劃法實現(xiàn)求最長公共子序列及最長公共子字符串,簡單描述了動態(tài)規(guī)劃法的概念、原理,并結(jié)合實例形式分析了Java使用動態(tài)規(guī)劃法求最長公共子序列以及最長公共子字符串相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • 基于springEL表達式詳解及應(yīng)用

    基于springEL表達式詳解及應(yīng)用

    這篇文章主要介紹了springEL表達式詳解及應(yīng)用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatisPlus 大于小于的實現(xiàn)示例

    mybatisPlus 大于小于的實現(xiàn)示例

    在 MyBatis Plus 中進行條件查詢,使用小于等于,大于等于操作可以通過其提供的條件構(gòu)造器(Wrapper)來實現(xiàn),下面就來詳細的介紹一下mybatisPlus 大于小于的實現(xiàn)示例,感興趣的可以了解一下
    2025-12-12
  • 詳解如何實現(xiàn)OpenAPI開發(fā)動態(tài)處理接口的返回數(shù)據(jù)

    詳解如何實現(xiàn)OpenAPI開發(fā)動態(tài)處理接口的返回數(shù)據(jù)

    這篇文章主要為大家介紹了OpenAPI開發(fā)動態(tài)處理接口的返回數(shù)據(jù)如何實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java延時任務(wù)實現(xiàn)方案及四大典型場景詳解(適用于Spring?Boot3)

    Java延時任務(wù)實現(xiàn)方案及四大典型場景詳解(適用于Spring?Boot3)

    在Java編程中,延時函數(shù)是一種常用的技術(shù),用于在程序執(zhí)行過程中暫停一段時間,這篇文章主要介紹了Java延時任務(wù)實現(xiàn)方案及四大典型場景(適用于SpringBoot3)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-05-05

最新評論

托克逊县| 井陉县| 若尔盖县| 蛟河市| 称多县| 东乌| 称多县| 宜章县| 四子王旗| 平凉市| 伊宁县| 慈利县| 马尔康县| 文成县| 平凉市| 肃北| 鱼台县| 扎兰屯市| 黑河市| 巴东县| 武强县| 湖口县| 大冶市| 青岛市| 乐平市| 建瓯市| 大庆市| 巴楚县| 淮安市| 贞丰县| 兴山县| 昔阳县| 安宁市| 全南县| 达拉特旗| 水城县| 青田县| 拜泉县| 区。| 东至县| 泸水县|