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

Java基礎(chǔ)二十二(對(duì)集合元素排序比較)

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

對(duì)集合元素排序比較

1. 使用 Comparable 接口實(shí)現(xiàn)默認(rèn)排序

Comparable 是 Java 中的一個(gè)接口,用于定義對(duì)象之間的排序規(guī)則。

實(shí)現(xiàn)了 Comparable 接口的類可以比較其對(duì)象的大?。òb類都實(shí)現(xiàn)了該接口),從而可以在集合類(如 TreeSet、TreeMap 等)中進(jìn)行排序和查找操作。這種排序被稱為類的自然排序,類的 compareTo() 方法被稱為它的自然比較方法。

public interface Comparable<T> {
	int compareTo(T o);
}

compareTo() 方法的返回值有以下三種情況:

  • 返回負(fù)整數(shù):表示當(dāng)前對(duì)象小于傳入對(duì)象。
  • 返回零:表示當(dāng)前對(duì)象等于傳入對(duì)象。
  • 返回正整數(shù):表示當(dāng)前對(duì)象大于傳入對(duì)象。
  • T 是泛型的一種表現(xiàn)方式,表示一種類型。

示例1
學(xué)生類 Student 實(shí)現(xiàn)了 Comparable 接口,重寫(xiě)了 compareTo() 方法,通過(guò)比較總成績(jī)實(shí)現(xiàn)對(duì)象之間的大小比較。

public class Student implements Comparable{
    private String name;
    private int math;
    private int chinese;

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

    public int getMath() {
        return math;
    }

    public int getChinese() {
        return chinese;
    }

    // 獲取總成績(jī)
    public int getTotal() {
        return math + chinese;
    }

    // 根據(jù)方法重寫(xiě)比較器
    @Override
    public int compareTo(Object o) throws RuntimeException {
        if (o instanceof Student student) {
            if (this.getTotal() > student.getTotal()) {
                return 1;
            } else if (this.getTotal() < student.getTotal()) {
                return -1;
            }
            // 比較姓名
            return this.name.compareTo(student.name);
        }
        throw new CompareException("類型不匹配");
    }

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

    // 自定義異常
    class CompareException extends RuntimeException {
        public CompareException() {
            super();
        }

        public CompareException(String message) {
            super(message);
        }
    }
}

public class ComparableExample {
    public static void main(String[] args) {
        Student[] stus = {
                new Student("張三", 23, 90),
                new Student("李四", 24, 80),
                new Student("王五", 23, 70),
                new Student("趙六", 24, 80),
                new Student("田七", 25, 50)
        };
        sort(stus);
        for (Student student : stus) {
            System.out.println(student.toString());
        }
    }

    private static void sort(Student[] students) {
        for (int i = 0; i < students.length - 1; i++) {
            for (int j = 0; j < students.length - 1 - i; j++) {
                if (students[j].compareTo(students[j + 1]) < 0) {
                    Student studentTemp = students[j];
                    students[j] = students[j + 1];
                    students[j + 1] = studentTemp;
                }
            }
        }
    }
}

輸出

Student{name='張三', math=23, chinese=90}113
Student{name='趙六', math=24, chinese=80}104
Student{name='李四', math=24, chinese=80}104
Student{name='王五', math=23, chinese=70}93
Student{name='田七', math=25, chinese=50}75

2. 使用 Comparator 接口實(shí)現(xiàn)比較器排序

Comparator 是 java 中的一個(gè)接口,用于定義對(duì)象之間的定制排序規(guī)則。

Comparable 接口不同,Comparator 接口允許在排序時(shí)使用獨(dú)立于對(duì)象類的比較邏輯,因此可以在不休改對(duì)象類的情況下實(shí)現(xiàn)多種不同的排序方式,當(dāng)使用了實(shí)現(xiàn) Comparator 接口的比較器后,默認(rèn)的 COmparable 比較器就不起作用了。

使用 Comparator 接口需要重寫(xiě) compare() 方法,該方法的定義語(yǔ)法格式如下:

public interface Comparator<T> {
	int compare(T o1, T o2);
	boolean equals(Object obj);
}

示例2
按照語(yǔ)文成績(jī)排序

import java.util.Arrays;
import java.util.Objects;

public class ComparableExample {
    public static void main(String[] args) {
        Student[] stus = {
                new Student("張三", 23, 90),
                new Student("李四", 24, 80),
                new Student("王五", 43, 70),
                new Student("趙六", 24, 80),
                new Student("田七", 25, 50)
        };
		// 使用 Arrsys.sort(),傳入比較器,實(shí)現(xiàn)對(duì)多個(gè)對(duì)象比較
        ChineseComparator comparator = new ChineseComparator();
        Arrays.sort(stus, comparator);
        for (Student student : stus) {
            System.out.println(student.toString());
        }

		// 比較兩個(gè)對(duì)象
//        int n = Objects.compare(stus[1], stus[3], comparator);
//        System.out.println(n);
    }
package kfm.bases.SetDemo;

import java.util.Comparator;

public class ChineseComparator implements Comparator {
	// 按照語(yǔ)文成績(jī)排序
    @Override
    public int compare(Object o1, Object o2) {
        if (o1 != null && o2 != null) {
            if (o1 instanceof Student student1 && o2 instanceof Student student2) {
                return student1.getChinese() - student2.getChinese();
            } else {
                throw new RuntimeException("數(shù)據(jù)類型異常");
            }
        } else {
            throw new RuntimeException("空指針異常");
        }
    }
}

輸出:

Student{name='田七', math=25, chinese=50}75
Student{name='王五', math=43, chinese=70}113
Student{name='李四', math=24, chinese=80}104
Student{name='趙六', math=24, chinese=80}104
Student{name='張三', math=23, chinese=90}113

compare() 方法用于在 Arrays 類調(diào)用 sort(比較對(duì)象數(shù)組, 比較器) 方法時(shí),對(duì)兩個(gè)對(duì)象進(jìn)行比較大小。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-688268.html

到了這里,關(guān)于Java基礎(chǔ)二十二(對(duì)集合元素排序比較)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    【從零開(kāi)始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    目錄 ?前言: ?BigInterger: BigInteger常見(jiàn)的方法: 總結(jié): ? ? ? ? 本篇我們將介紹BigInteger這個(gè)比較實(shí)用一點(diǎn)的API,這個(gè)API在我們實(shí)際寫(xiě)項(xiàng)目中都是很實(shí)用的API,因此大家應(yīng)該對(duì)這個(gè)API有更加熟練的掌握。 在Java中,整數(shù)類型int和long的取值范圍是有限的,超出該范圍的整數(shù)無(wú)法

    2024年02月15日
    瀏覽(36)
  • 【Java EE初階二十二】https的簡(jiǎn)單理解

    【Java EE初階二十二】https的簡(jiǎn)單理解

    ?????????當(dāng)前網(wǎng)絡(luò)上,主要都是 HTTPS 了,很少能見(jiàn)到 HTTP.實(shí)際上 HTTPS 也是基于 HTTP.只不過(guò) HTTPS 在 HTTP 的基礎(chǔ)之上, 引入了\\\"加密\\\"機(jī)制;引入 HTTPS 防止你的數(shù)據(jù)被黑客篡改 ; ????????HTTPS 就是一個(gè)重要的保護(hù)措施.之所以能夠安全, 最關(guān)鍵的在于\\\"加密”; ? ? ? ? 明文:

    2024年02月22日
    瀏覽(19)
  • 部署問(wèn)題集合(二十二)Linux設(shè)置定時(shí)任務(wù),并設(shè)置系統(tǒng)時(shí)間

    部署問(wèn)題集合(二十二)Linux設(shè)置定時(shí)任務(wù),并設(shè)置系統(tǒng)時(shí)間

    因?yàn)轫?xiàng)目中經(jīng)常用到定時(shí)任務(wù),特此總結(jié)記錄一下 大部分虛擬機(jī)創(chuàng)建后就自帶定時(shí)服務(wù),直接用命令就好 編輯定時(shí)任務(wù): crontab -e ,在該文件下添加如下內(nèi)容 開(kāi)機(jī)自啟: @reboot /home/autoRun.sh 定時(shí)執(zhí)行: 0 0 * * * /home/sutoRun.sh (凌晨十二點(diǎn)執(zhí)行) 時(shí)間后也可以接命令 若要在該

    2024年02月11日
    瀏覽(23)
  • Java遍歷集合元素并修改

    結(jié)論:fori循環(huán)可以修改、刪除、添加,但是要注意的是下標(biāo)還是元素;增強(qiáng)for循環(huán)內(nèi),可以修改,不可以刪除、添加。想要?jiǎng)h除、添加,使用集合迭代器的刪除、添加方法。 對(duì)List和Set的遍歷,有四種方式,下面以ArrayList為例進(jìn)行說(shuō)明。 1.1 fori循環(huán) 使用普通for循環(huán)的遍歷方式

    2024年02月06日
    瀏覽(15)
  • java 集合去重、獲取、統(tǒng)計(jì)重復(fù)元素

    開(kāi)發(fā)過(guò)程中常遇見(jiàn)的三種問(wèn)題:集合去重、獲取重復(fù)元素、統(tǒng)計(jì)重復(fù)次數(shù)。 網(wǎng)上搜了下,實(shí)現(xiàn)過(guò)程五花八門(mén),這里簡(jiǎn)單匯總下我覺(jué)得比較常用的方式: 方法:List轉(zhuǎn)set;一行代碼即可; 前提是不需要獲取重復(fù)元素和統(tǒng)計(jì)重復(fù)次數(shù) ,最簡(jiǎn)單的就是把List轉(zhuǎn)為Set,眾所周知,set的

    2024年02月16日
    瀏覽(52)
  • java 兩個(gè)list比較,刪除相同的元素

    java 兩個(gè)list比較,刪除相同的元素

    概述 在Java開(kāi)發(fā)中,經(jīng)常需要比較兩個(gè)List并刪除相同的元素。本文將介紹整個(gè)流程,并提供相應(yīng)的代碼示例,幫助新手開(kāi)發(fā)者完成這個(gè)任務(wù)。 流程 下面是比較兩個(gè)List并刪除相同元素的流程: 代碼示例 創(chuàng)建兩個(gè)List 我們首先需要?jiǎng)?chuàng)建兩個(gè)List對(duì)象,分別代表待比較的兩個(gè)列表

    2024年02月07日
    瀏覽(27)
  • 【從零開(kāi)始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    【從零開(kāi)始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    目錄 前言: 單列集合的遍歷方式: 迭代器遍歷: 增強(qiáng)for遍歷: lambda方法遍歷:? 總結(jié): 本篇我們會(huì)講解關(guān)于單列集合的幾種遍歷方式,遍歷集合可以說(shuō)是對(duì)于集合要求掌握的最低技能,因此我們要熟練的掌握遍歷集合的方式。 在這里我們不講for循環(huán)遍歷,for循環(huán)無(wú)法對(duì)單

    2024年02月16日
    瀏覽(90)
  • 【從零開(kāi)始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    【從零開(kāi)始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    目錄 前言: 單列集合:? ? ? set與list的區(qū)別: 雙列集合: map的特點(diǎn): 總結(jié): ? ? ? ? ? ? ? ? ? JAVA中為我們提供了很多集合,這些集合都有自己很獨(dú)特的特點(diǎn),因此我們要學(xué)習(xí)所有的集合,但是在學(xué)習(xí)所有的集合之前,我們還是先為大家介紹一下JAVA的集合體系結(jié)構(gòu),這

    2024年02月16日
    瀏覽(17)
  • 【在Java中如何判斷元素是否在集合中】

    在Java編程中,集合是非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之一。在處理集合數(shù)據(jù)時(shí),經(jīng)常需要判斷某個(gè)元素是否在集合中。本文將介紹在Java中如何判斷元素是否在集合中,以及常用的方法和技巧。 在Java中,判斷元素是否在集合中通常使用以下兩種方式: 使用contains()方法 使用containsAll()方

    2024年01月17日
    瀏覽(32)
  • 從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之Collection集合及l(fā)ist集合(二十一)

    從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之Collection集合及l(fā)ist集合(二十一)

    1.1數(shù)組和集合的區(qū)別 相同點(diǎn) 都是容器,可以存儲(chǔ)多個(gè)數(shù)據(jù) 不同點(diǎn) 數(shù)組的長(zhǎng)度是不可變的,集合的長(zhǎng)度是可變的 數(shù)組可以存基本數(shù)據(jù)類型和引用數(shù)據(jù)類型 集合只能存引用數(shù)據(jù)類型,如果要存基本數(shù)據(jù)類型,需要存對(duì)應(yīng)的包裝類 1.2集合類體系結(jié)構(gòu) 1.3Collection 集合概述和使用 Collec

    2024年02月10日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包