欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年06月19日 10:51:33   作者:葉晨爍  
這篇文章主要介紹了Java語言的Comparable和Comparator區(qū)別,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(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)對象的自然排序
    • 我們必須修改要對其實例進(jì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 排序鍵,并通過該鍵進(jìn)行比較。

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()方法,我們可以在對對象進(jìn)行排序時使用多個比較器。

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ù)單詞的長度對其進(jìn)行比較。

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

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

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的那些注解使用

    帶你快速入門掌握Spring的那些注解使用

    注解是個好東西,注解是Java語法,被Java編譯器檢查,可以減少配置錯誤,這篇文章主要給大家介紹了關(guān)于Spring的那些注解使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • springboot項目實現(xiàn)定時備份數(shù)據(jù)庫導(dǎo)出sql文件方式

    springboot項目實現(xiàn)定時備份數(shù)據(jù)庫導(dǎo)出sql文件方式

    這篇文章主要介紹了springboot項目實現(xiàn)定時備份數(shù)據(jù)庫導(dǎo)出sql文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot應(yīng)用啟動慢的原因分析及優(yōu)化方法

    SpringBoot應(yīng)用啟動慢的原因分析及優(yōu)化方法

    在使用Spring Boot進(jìn)行開發(fā)時,快速啟動應(yīng)用程序是一個非常重要的需求,然而,在某些情況下,我們會遇到Spring Boot應(yīng)用啟動緩慢的問題,本文將分析Spring Boot應(yīng)用啟動慢的常見原因,并提供一些優(yōu)化方法,需要的朋友可以參考下
    2024-08-08
  • Java日期接收報錯:could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法

    Java日期接收報錯:could?not?be?parsed,?unparsed?text?found?a

    在做Java開發(fā)時肯定會碰到傳遞時間參數(shù)的情況,這篇文章主要給大家介紹了關(guān)于Java日期接收報錯:could?not?be?parsed,?unparsed?text?found?at?index?10的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 關(guān)于Maven如何構(gòu)建生命周期

    關(guān)于Maven如何構(gòu)建生命周期

    這篇文章主要介紹了關(guān)于Maven如何構(gòu)建生命周期,Maven構(gòu)建生命周期描述的是一次構(gòu)建過程經(jīng)歷經(jīng)歷了多少個事件,需要的朋友可以參考下
    2023-04-04
  • springboot中application.yml多環(huán)境生效規(guī)則說明

    springboot中application.yml多環(huán)境生效規(guī)則說明

    這篇文章主要介紹了springboot中application.yml多環(huán)境生效規(guī)則說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringSession 請求與響應(yīng)重寫的實現(xiàn)

    SpringSession 請求與響應(yīng)重寫的實現(xiàn)

    這篇文章主要介紹了SpringSession 請求與響應(yīng)重寫的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 深入淺析Java中的volatile

    深入淺析Java中的volatile

    volatile是Java提供的一種輕量級的同步機(jī)制,在并發(fā)編程中,它也扮演著比較重要的角色.這篇文章主要介紹了深入淺析Java中的volatile,需要的朋友可以參考下
    2017-03-03
  • 玩轉(zhuǎn)spring boot 結(jié)合jQuery和AngularJs(3)

    玩轉(zhuǎn)spring boot 結(jié)合jQuery和AngularJs(3)

    玩轉(zhuǎn)spring boot,這篇文章主要介紹了結(jié)合jQuery和AngularJs,玩轉(zhuǎn)spring boot,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳解Java如何實現(xiàn)與JS相同的Des加解密算法

    詳解Java如何實現(xiàn)與JS相同的Des加解密算法

    這篇文章主要介紹了如何在Java中實現(xiàn)與JavaScript相同的DES(Data Encryption Standard)加解密算法,確保在兩個平臺之間可以無縫地傳遞加密信息,希望對大家有一定的幫助
    2025-04-04

最新評論