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

認(rèn)識(shí)比較器

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

Java中比較器是排序、加入有序數(shù)組等操作的時(shí)候必須要有的,沒有的話會(huì)報(bào)錯(cuò),例如下面這段代碼:

package dataStructure.heap;

import java.util.Arrays;
import java.util.Comparator;
import java.util.TreeMap;

public class MyComparatorTest {
    public static void main(String[] args) {
        Student[] students = {new Student(2, "student2", 20),
                new Student(2, "student3", 30), new Student(4, "student4", 40)};
        //這里如果只寫students數(shù)組而不傳入比較器的話會(huì)報(bào)錯(cuò)

        Arrays.sort(students);
       
    }
}

class Student {
    int age;
    String name;
    int id;

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

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

運(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(ComparableTimSort.java:320)
?? ?at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
?? ?at java.util.Arrays.sort(Arrays.java:1246)
?? ?at dataStructure.heap.MyComparatorTest.main(MyComparatorTest.java:13)

Process finished with exit code 1

這個(gè)sort方法是可以只傳入數(shù)組(數(shù)組中的類型是基礎(chǔ)類型或者已經(jīng)實(shí)現(xiàn)了Comparable了),也可以傳入兩個(gè)參數(shù):數(shù)組和數(shù)組中類型的比較器

比較器實(shí)現(xiàn)有兩種方式,

一種是當(dāng)前類實(shí)現(xiàn)了java.lang.Comparable接口,這個(gè)時(shí)候當(dāng)前類需要實(shí)現(xiàn)下面這個(gè)方法:

@Override
public int compareTo(Object o) {
    return 0;
}

這種方式只有一種比較方式,比較死板,一般我不會(huì)使用(雖然也可以疊加比較器,疊加比較器的時(shí)候相當(dāng)于這是一種默認(rèn)的,傳了使用比較器,沒有傳使用這個(gè))

第二種方式是:寫一個(gè)比較器類繼承Comparator,范型是當(dāng)前類型(也可以不寫比較器類而在使用的時(shí)候直接傳入Lambda表達(dá)式)

改造之后的類如下:

package dataStructure.heap;

import java.util.Arrays;
import java.util.Comparator;
import java.util.TreeMap;

public class MyComparatorTest {
    public static void main(String[] args) {
        Student[] students = {new Student(2, "student2", 20),
                new Student(2, "student3", 30), new Student(4, "student4", 40)};
        //這里如果只寫students數(shù)組而不傳入比較器的話會(huì)報(bào)錯(cuò)
        //第二個(gè)參數(shù)是比較器類或者Lambda表達(dá)式
        Arrays.sort(students, new AgeAscComparator());
        Arrays.sort(students, (a, b) -> a.age - b.age);
        for (Student student : students) {
            System.out.println(student);
        }
        
    }
}

class AgeAscIdDescComparator implements  Comparator<Student> {

    @Override
    public int compare(Student o1, Student o2) {
        return o1.age == o2.age ? o2.id - o1.id : o1.age - o2.age;
    }
}

class AgeAscComparator implements Comparator<Student> {

    //這個(gè)是必須實(shí)現(xiàn)的方法,所有的比較器都需要遵循以下規(guī)律:
    //1.返回負(fù)數(shù)的時(shí)候,認(rèn)為第一個(gè)參數(shù)應(yīng)該排在前面,例如數(shù)字類型的誰小誰在前
    //2.返回正數(shù)的時(shí)候,認(rèn)為第二個(gè)參數(shù)應(yīng)該排在前面,例如數(shù)字類型的誰大誰在前
    //3.返回0的時(shí)候,無所謂誰排在前面
    @Override
    public int compare(Student o1, Student o2) {
        /**
         * 這一句話也可以替換為:if(o1.age < o2.age) {
         *  return -1;
         * } else if(o1.age > o2.age) {
         *  return 1;
         * } else {
         *  return 0;
         *  }
         */
        return o1.age - o2.age;
    }
}

class Student {
    int age;
    String name;
    int id;

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

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

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

運(yùn)行結(jié)果:

Student{age=2, name='student2', id=20}
Student{age=2, name='student3', id=30}
Student{age=4, name='student4', id=40}

Process finished with exit code 0

這里我們看到其實(shí)age排序并不能明確區(qū)分student2還是student3在前

使用第二種方式寫更復(fù)雜一點(diǎn)的比較器類(多個(gè)字段比較或者同一個(gè)字段相同的時(shí)候區(qū)別先后順序)

class AgeAscIdDescComparator implements  Comparator<Student> {

    @Override
    public int compare(Student o1, Student o2) {
        //如果age相同,按id降序
        //如果age不同,按age升序
        return o1.age == o2.age ? o2.id - o1.id : o1.age - o2.age;
    }
}

傳入這個(gè)比較器的時(shí)候運(yùn)行結(jié)果如下(確定age相同的時(shí)候id大的在前):

Student{age=2, name='student3', id=30}
Student{age=2, name='student2', id=20}
Student{age=4, name='student4', id=40}文章來源地址http://www.zghlxwxcb.cn/news/detail-424776.html

到了這里,關(guān)于認(rèn)識(shí)比較器的文章就介紹完了。如果您還想了解更多內(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)文章

  • 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.lang.Comparable實(shí)現(xiàn)比較器和使用java.util.Collections排序

    記錄 :469 場(chǎng)景 :使用java.lang.Comparable實(shí)現(xiàn)比較器,使用java.util.Collections排序,實(shí)現(xiàn)找出最大值。 版本 :JDK 1.8,Spring?Boot 2.6.3,fastjson-2.0.33。 1.一個(gè)JSON字符串,找出最大值 1.1JSON字符串 1.2解析 把JSON字符串轉(zhuǎn)換是JSONArray類型,把值取出轉(zhuǎn)換為獨(dú)立對(duì)象,再做比較。 2.使用java.

    2024年02月15日
    瀏覽(51)
  • Java ---比較器

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

    2024年02月03日
    瀏覽(25)
  • 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)
  • 一位比較器【模電實(shí)驗(yàn)】

    一位比較器【模電實(shí)驗(yàn)】

    一位比較器,數(shù)值比較器的作用和原理是什么? 一、數(shù)值比較器的定義及功能 在數(shù)字系統(tǒng)中,特別是在計(jì)算機(jī)中都具有運(yùn)算功能,一種簡(jiǎn)單的運(yùn)算就是比較兩個(gè)數(shù)A和B的大小。數(shù)值比較器就是對(duì)兩數(shù)A、B進(jìn)行比較,以判斷其大小的邏輯電路。比較結(jié)果有A>B、A<B以及

    2024年02月05日
    瀏覽(26)
  • 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)
  • Verilog | 4位數(shù)值比較器

    Verilog | 4位數(shù)值比較器

    ??蜕系囊坏李},記錄一下 這道題有兩種思路: 第一種是按位比較,列舉出所有情況: 第二種方法是,使用同或的方式獲取一個(gè)標(biāo)志位,進(jìn)而獲得判斷依據(jù): 關(guān)于比較器還有另外一道題 問題描述 給定8個(gè)數(shù),以及若干二輸入的比較器(可以將兩個(gè)輸入排序)。要求在單周期

    2024年02月11日
    瀏覽(26)
  • JAVA語言-比較器Comparator

    JAVA語言-比較器Comparator

    目錄 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的區(qū)別 Comparator的例子 Comparator 是javase中的接口,位于java.util包下。 數(shù)組工具類和集合工具類中提供的工具方法sort方法都給出了含有Comparator接口的重載方法。 List實(shí)例調(diào)sort方法 demo如下: 使

    2024年02月06日
    瀏覽(20)
  • 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)
  • LM324電壓比較器介紹

    LM324電壓比較器介紹

    LM324 電壓比較器簡(jiǎn)介 ? ? ? LM324 是單電源四路運(yùn)算放大器,是一個(gè)具有差分輸入和單端輸出的高增益電壓放大器。與在單電源應(yīng)用場(chǎng)合的標(biāo)準(zhǔn)運(yùn)算放大器比起來,其優(yōu)點(diǎn)更明顯。該四路放大器可以工作于低至3.0 V或高達(dá)32 V的電源電壓,靜態(tài)電流是MC1741的五分之一左右(每個(gè)放

    2024年02月06日
    瀏覽(39)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包