国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java自然排序Comparable和比較器排序Comparator

這篇具有很好參考價(jià)值的文章主要介紹了java自然排序Comparable和比較器排序Comparator。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

自然排序Comparable的使用

  • 案例需求

    • 存儲(chǔ)學(xué)生對(duì)象并遍歷,創(chuàng)建TreeSet集合使用無參構(gòu)造方法
    • 要求:按照年齡從小到大排序,年齡相同時(shí),按照姓名的字母順序排序
  • 實(shí)現(xiàn)步驟

    1. 使用空參構(gòu)造創(chuàng)建TreeSet集合
      • 用TreeSet集合存儲(chǔ)自定義對(duì)象,無參構(gòu)造方法使用的是自然排序?qū)υ剡M(jìn)行排序的
    2. 自定義的Student類實(shí)現(xiàn)Comparable接口
      • 自然排序,就是讓元素所屬的類實(shí)現(xiàn)Comparable接口,重寫compareTo(T o)方法
    3. 重寫接口中的compareTo方法
      • 重寫方法時(shí),一定要注意排序規(guī)則必須按照要求的主要條件和次要條件來寫
  • 代碼實(shí)現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-471861.html

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        //按照對(duì)象的年齡進(jìn)行排序
        //主要判斷條件: 按照年齡從小到大排序
        int result = this.age - o.age;
        //次要判斷條件: 年齡相同時(shí),按照姓名的字母順序排序
        result = result == 0 ? this.name.compareTo(o.getName()) : result;
        return result;
    }
}
public class MyTreeSet2 {
    public static void main(String[] args) {
        //創(chuàng)建集合對(duì)象
        TreeSet<Student> ts = new TreeSet<>();
	    //創(chuàng)建學(xué)生對(duì)象
        Student s1 = new Student("zhangsan",28);
        Student s2 = new Student("lisi",27);
        Student s3 = new Student("wangwu",29);
        Student s4 = new Student("zhaoliu",28);
        Student s5 = new Student("qianqi",30);
		//把學(xué)生添加到集合
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
		//遍歷集合
        for (Student student : ts) {
            System.out.println(student);
        }
    }
}

比較器排序Comparator的使用

  • 案例需求

    • 存儲(chǔ)老師對(duì)象并遍歷,創(chuàng)建TreeSet集合使用帶參構(gòu)造方法
    • 要求:按照年齡從小到大排序,年齡相同時(shí),按照姓名的字母順序排序
  • 實(shí)現(xiàn)步驟

    • 用TreeSet集合存儲(chǔ)自定義對(duì)象,帶參構(gòu)造方法使用的是比較器排序?qū)υ剡M(jìn)行排序的
    • 比較器排序,就是讓集合構(gòu)造方法接收Comparator的實(shí)現(xiàn)類對(duì)象,重寫compare(T o1,T o2)方法
    • 重寫方法時(shí),一定要注意排序規(guī)則必須按照要求的主要條件和次要條件來寫
  • 代碼實(shí)現(xiàn)

public class Teacher {
    private String name;
    private int age;

    public Teacher() {
    }

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class MyTreeSet4 {
    public static void main(String[] args) {
      	//創(chuàng)建集合對(duì)象
        TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
                //o1表示現(xiàn)在要存入的那個(gè)元素
                //o2表示已經(jīng)存入到集合中的元素
              
                //主要條件
                int result = o1.getAge() - o2.getAge();
                //次要條件
                result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
                return result;
            }
        });
		//創(chuàng)建老師對(duì)象
        Teacher t1 = new Teacher("zhangsan",23);
        Teacher t2 = new Teacher("lisi",22);
        Teacher t3 = new Teacher("wangwu",24);
        Teacher t4 = new Teacher("zhaoliu",24);
		//把老師添加到集合
        ts.add(t1);
        ts.add(t2);
        ts.add(t3);
        ts.add(t4);
		//遍歷集合
        for (Teacher teacher : ts) {
            System.out.println(teacher);
        }
    }
}

兩種比較方式總結(jié)

  • 兩種比較方式小結(jié)
    • 自然排序: 自定義類實(shí)現(xiàn)Comparable接口,重寫compareTo方法,根據(jù)返回值進(jìn)行排序
    • 比較器排序: 創(chuàng)建TreeSet對(duì)象的時(shí)候傳遞Comparator的實(shí)現(xiàn)類對(duì)象,重寫compare方法,根據(jù)返回值進(jìn)行排序
    • 在使用的時(shí)候,默認(rèn)使用自然排序,當(dāng)自然排序不滿足現(xiàn)在的需求時(shí),必須使用比較器排序
  • 兩種方式中關(guān)于返回值的規(guī)則
    • 如果返回值為負(fù)數(shù),表示當(dāng)前存入的元素是較小值,存左邊
    • 如果返回值為0,表示當(dāng)前存入的元素跟集合中元素重復(fù)了,不存
    • 如果返回值為正數(shù),表示當(dāng)前存入的元素是較大值,存右邊

到了這里,關(guān)于java自然排序Comparable和比較器排序Comparator的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java比較器(Comparator接口)

    1.當(dāng)元素的類型沒有實(shí)現(xiàn)java.lang.Comparable接口而又不方便修改代碼,或者實(shí)現(xiàn)了java.lang.Comparable接口的排序規(guī)則不適合當(dāng)前的操作,那么可以考慮使用 Comparator 的對(duì)象來排序 2.重寫compare(Object o1,Object o2)方法,比較o1和o2的大小:如果方法返回正整數(shù),則表示o1大于o2;如果返回

    2024年02月15日
    瀏覽(26)
  • Java中的比較器(Comparator)

    Java中的比較器(Comparator)是一種對(duì)象,用于定義兩個(gè)對(duì)象之間的比較規(guī)則。它是一個(gè)獨(dú)立的類,實(shí)現(xiàn)了Comparator接口,通常用于對(duì)集合中的元素進(jìn)行排序。Comparator接口中有一個(gè)compare()方法,它接受兩個(gè)對(duì)象作為參數(shù),并返回一個(gè)int值,表示它們的順序。 下面是一個(gè)簡(jiǎn)單的例

    2024年02月11日
    瀏覽(17)
  • Java入門8(Comparator比較器,HashMap)

    ?Comparator不同于Comparable,使用更加的靈活,可以在不同場(chǎng)景下使用比較器,實(shí)際開發(fā)中,更推薦comparator比較器 Set接口常用實(shí)現(xiàn)類 三個(gè)常用實(shí)現(xiàn)類:TreeSet(基于Java紅黑樹,底層map),HashSet(哈希表,底層map),LinkedHashSet() Set特點(diǎn): 不允許存儲(chǔ)重復(fù)元素 沒有索引,不能

    2024年02月04日
    瀏覽(22)
  • 記錄EF 排序配上自定義的比較器

    要求頁(yè)面文件顯示的時(shí)候能夠按照序號(hào)去排序要求如下: 數(shù)據(jù)庫(kù)有一個(gè)列存放文件名,如: 1.1文件 1.2文件 1.1.1文件 1.1.11文件1.0.txt 1.1.2(文件).pdf 現(xiàn)在需要實(shí)現(xiàn)查詢的時(shí)候按照這個(gè)列排序,并且是按照序號(hào)排序。 查詢的時(shí)候是按層級(jí)查詢的,每次查詢只會(huì)當(dāng)前所在層,1

    2024年02月08日
    瀏覽(21)
  • 劍指 Offer 45. ?。“褦?shù)組排成最小的數(shù)(使用比較器的定制排序;快速排序)

    劍指 Offer 45. 把數(shù)組排成最小的數(shù) 中等 662 相關(guān)企業(yè) 輸入一個(gè)非負(fù)整數(shù)數(shù)組,把數(shù)組里所有數(shù)字拼接起來排成一個(gè)數(shù),打印能拼接出的所有數(shù)字中最小的一個(gè)。 示例 1: 輸入: [10,2] 輸出: “102” 示例 2: 輸入: [3,30,34,5,9] 輸出: “3033459” 這道題在左程云算法課上講過,但是這次

    2024年02月14日
    瀏覽(22)
  • C#使用自定義的比較器對(duì)版本號(hào)(編碼)字符串進(jìn)行排序

    C#使用自定義的比較器對(duì)版本號(hào)(編碼)字符串進(jìn)行排序

    給定一些數(shù)據(jù),如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “1.1.1.1.1”, “1.1.1.1.1.1” 實(shí)現(xiàn)效果: 按照每個(gè)節(jié)點(diǎn)層

    2024年02月11日
    瀏覽(42)
  • Java ---比較器

    ? ? ? 我們知道基本數(shù)據(jù)類型的數(shù)據(jù)(除 boolean 類型外)需要比較大小的話,之間使用比較運(yùn)算符即可,但是引用數(shù)據(jù)類型是不能直接使用比較運(yùn)算符來比較大小的。那么,如何解決這個(gè)問題呢? ? ? ?在 Java 中經(jīng)常會(huì)涉及到對(duì)象數(shù)組的排序問題,那么就涉及到對(duì)象之間的比

    2024年02月03日
    瀏覽(25)
  • 認(rèn)識(shí)比較器

    Java中比較器是排序、加入有序數(shù)組等操作的時(shí)候必須要有的,沒有的話會(huì)報(bào)錯(cuò),例如下面這段代碼: 運(yùn)行時(shí)會(huì)發(fā)生下面的異常 Exception in thread \\\"main\\\" java.lang.ClassCastException: dataStructure.heap.Student cannot be cast to java.lang.Comparable ?? ?at java.util.ComparableTimSort.countRunAndMakeAscending(Compar

    2023年04月25日
    瀏覽(23)
  • 8.2 電壓比較器(1)

    8.2 電壓比較器(1)

    電壓比較器是對(duì)輸入信號(hào)進(jìn)行鑒幅與比較的電路,是組成非正弦波發(fā)生電路的基本單元電路,在測(cè)量和控制中有著相當(dāng)廣泛的應(yīng)用。 1、電壓比較器的電壓傳輸特性 電壓比較器的輸出電壓 u O u_{scriptscriptstyle O} u O ? 與輸入電壓 u I u_{scriptscriptstyle I} u I ? 的函數(shù)關(guān)系 u O = f

    2024年02月11日
    瀏覽(28)
  • LM393電壓比較器介紹

    LM393電壓比較器介紹

    概述 ? ? ? LM393 是雙電壓比較器集成電路。主要應(yīng)用在脈沖發(fā)生器、模數(shù)轉(zhuǎn)換器、限幅器、數(shù)字邏輯門電路、電壓比較電路等場(chǎng)合。LM393電壓比較器能直接連接TTL和CMOS電平電路。 特點(diǎn) 1、工作溫度范圍:0℃ --- +70℃; 2、工作電源電壓范圍寬,單電源、雙電源均可工作: ? ?

    2024年02月03日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包