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

使用Java如何對(duì)復(fù)雜的數(shù)據(jù)類型排序和比大小

 更新時(shí)間:2023年12月09日 14:13:17   作者:luming.02  
我相信大家在第一次接觸算法的時(shí)候,最先接觸的肯定也是從排序算法開始的,下面這篇文章主要給大家介紹了關(guān)于使用Java如何對(duì)復(fù)雜的數(shù)據(jù)類型排序和比大小的相關(guān)資料,需要的朋友可以參考下

一.對(duì)復(fù)雜的數(shù)據(jù)類型比大小

假如我們現(xiàn)在有個(gè)學(xué)生類,并且我們實(shí)例化出了倆個(gè)學(xué)生對(duì)象,他們各自有各自的名字和年齡屬性,我們?nèi)绾螌?duì)他們進(jìn)行比大小操作呢?

class Student {
    public String name;
    public int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
 
public class Test{
    public static void main(String[] args) {
        Student student1 = new Student("張三",20);
        Student student2 = new Student("李四",23);   
        if (student1 > student2) {
            System.out.println("student1 > student2");
        }else {
            System.out.println("student1 < student2");
        }
    }
}

我們可以看見編譯器的報(bào)錯(cuò)提示,這是因?yàn)镴ava提供的運(yùn)算符號(hào)只能識(shí)別操作簡(jiǎn)單的數(shù)據(jù)類型,對(duì)于我們自定義的Student類是無(wú)法識(shí)別的

Comparable接口

在這種情況下,我們就可以使用我們之前的講解的接口的知識(shí),我們可以調(diào)用Comparable接口,然后重寫其中的compareTo方法,在使用接口的時(shí)候需要注意聲明你需要比較的類型,也就是接口后尖括號(hào)內(nèi)的內(nèi)容

compareTo方法 

我們?cè)谶@里對(duì)接口中的compareTo方法進(jìn)行重寫后,在main方法中進(jìn)行調(diào)用 

class Student implements Comparable <Student> {
    public String name;
    public int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Student o) {
        return this.name.compareTo(o.name);
    }
}
 
public class Test{
 
    public static void main(String[] args) {
        Student student1 = new Student("張三",20);
        Student student2 = new Student("李四",23);
 
        if (student1.compareTo(student2) > 0) {
            System.out.println("student1 > student2");
        }else {
            System.out.println("student1 <= student2");
        }
    }
}

我們也可以根據(jù)年齡進(jìn)行比大小,只需要重新重寫這個(gè)方法就可以了

    @Override
    public int compareTo(Student o) {
        return this.age-o.age;
    }

二.對(duì)復(fù)雜數(shù)據(jù)類型排序

假如我們現(xiàn)在有一個(gè)學(xué)生類數(shù)組,我們使用Arrays.sort對(duì)他進(jìn)行排序

public class Test{
 
    public static void main(String[] args) {
        Student[] students = new Student[3];
        Student student1 = new Student("張三",20);
        Student student2 = new Student("李四",23);
        Student student3 = new Student("王五",25);
        students[0] = student1;
        students[1] = student2;
        students[2] = student3;
        
        Arrays.sort(students);
      
    }
}

我們會(huì)發(fā)現(xiàn)報(bào)錯(cuò)信息如下,原因就是對(duì)于這種復(fù)雜的數(shù)據(jù)類型,如果我們要讓編譯器來(lái)排序,那我們就需要給他排序規(guī)則,很顯然這里編譯器是沒(méi)有讀取到任何的排序規(guī)則的

我們點(diǎn)擊錯(cuò)誤信息,打開源碼觀察會(huì)發(fā)現(xiàn),編譯器這里還是用到了Comparable接口

那我們還是像剛才一樣調(diào)用Comparable接口,然后我們給出明確的排序規(guī)則,再寫一個(gè)排序方法,就可以正常對(duì)復(fù)雜數(shù)據(jù)排序了

import java.util.Arrays;
 
class Student implements Comparable <Student> {
    public String name;
    public int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
//    @Override
//    public int compareTo(Student o) {
//        return this.name.compareTo(o.name);
//    }
    @Override
    public int compareTo(Student o) {
        return this.age-o.age;
    }
    
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public static void mySort(Comparable[] comparables) {
 
        for (int i = 0; i < comparables.length-1; i++) {
            for (int j = 0; j < comparables.length-1-i; j++) {
                //if(comparables[j] > comparables[j+1]) {
                if(comparables[j].compareTo(comparables[j+1]) > 0) {
                    //交換
                    Comparable tmp = comparables[j];
                    comparables[j] = comparables[j+1];
                    comparables[j+1] = tmp;
                }
            }
        }
    }
}
 
public class Test{
 
    public static void main(String[] args) {
        Student[] students = new Student[3];
        Student student1 = new Student("張三",20);
        Student student2 = new Student("李四",23);
        Student student3 = new Student("王五",25);
        students[0] = student1;
        students[1] = student2;
        students[2] = student3;
        
        mySort(students);
        System.out.println(Arrays.toString(students));
       
    }
}

三.總結(jié)

當(dāng)我們需要對(duì)復(fù)雜的數(shù)據(jù)類型進(jìn)行排序或者比大小的時(shí)候,我們就可以使用Comparable接口,然后重寫其中的compareTo方法,然后就可以直接使用compareTo方法進(jìn)行排序了,又或者是通過(guò)其他方法來(lái)調(diào)用compareTo方法來(lái)對(duì)復(fù)雜類型的數(shù)組進(jìn)行排序

到此這篇關(guān)于使用Java如何對(duì)復(fù)雜的數(shù)據(jù)類型排序和比大小的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)類型排序和比大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java如何在沙箱環(huán)境中測(cè)試支付寶支付接口

    Java如何在沙箱環(huán)境中測(cè)試支付寶支付接口

    這篇文章主要介紹了Java如何在沙箱環(huán)境中測(cè)試支付寶支付接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • java 中歸并排序算法詳解

    java 中歸并排序算法詳解

    這篇文章主要介紹了java 中歸并排序算法詳解的相關(guān)資料,歸并排序算法又稱為合并排序算法,是一種時(shí)間復(fù)雜度為O(N logN)的排序算法,因而其在平常生活工作中應(yīng)用非常廣泛,需要的朋友可以參考下
    2017-09-09
  • 詳解Java的按位操作符

    詳解Java的按位操作符

    Java的位操作符用來(lái)操作整數(shù)基本數(shù)據(jù)類型中的單個(gè)“比特”(bit),即代進(jìn)制位。下面通過(guò)本文給大家分享Java的按位操作符,感興趣的朋友一起看看吧
    2017-09-09
  • java使用mybatis調(diào)用存儲(chǔ)過(guò)程返回一個(gè)游標(biāo)結(jié)果集方式

    java使用mybatis調(diào)用存儲(chǔ)過(guò)程返回一個(gè)游標(biāo)結(jié)果集方式

    這篇文章主要介紹了java使用mybatis調(diào)用存儲(chǔ)過(guò)程返回一個(gè)游標(biāo)結(jié)果集方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Maven Scope 取值范圍小結(jié)

    Maven Scope 取值范圍小結(jié)

    在Maven項(xiàng)目的pom.xml文件中,通常會(huì)給dependency設(shè)置scope屬性,本文主要介紹了Maven Scope 取值范圍,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • java 對(duì)稱加密算法實(shí)現(xiàn)詳解

    java 對(duì)稱加密算法實(shí)現(xiàn)詳解

    這篇文章主要介紹了java 對(duì)稱加密算法實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java使用Queryable-pageable實(shí)現(xiàn)分頁(yè)效果

    Java使用Queryable-pageable實(shí)現(xiàn)分頁(yè)效果

    這篇文章主要為大家介紹了Java如何使用Queryable-pageable從而實(shí)現(xiàn)分頁(yè)效果,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-06-06
  • 一篇文章教你如何在SpringCloud項(xiàng)目中使用OpenFeign

    一篇文章教你如何在SpringCloud項(xiàng)目中使用OpenFeign

    這篇文章主要介紹了SpringCloud 使用Open feign 優(yōu)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-08-08
  • 解決IDEA2020 創(chuàng)建maven項(xiàng)目沒(méi)有src/main/java目錄和webapp目錄問(wèn)題

    解決IDEA2020 創(chuàng)建maven項(xiàng)目沒(méi)有src/main/java目錄和webapp目錄問(wèn)題

    這篇文章主要介紹了IDEA2020 創(chuàng)建maven項(xiàng)目沒(méi)有src/main/java目錄和webapp目錄問(wèn)題解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • MyBatis連接池、動(dòng)態(tài) SQL 與多表關(guān)聯(lián)查詢的注意事項(xiàng)

    MyBatis連接池、動(dòng)態(tài) SQL 與多表關(guān)聯(lián)查詢的注意事項(xiàng)

    本文將從連接池原理出發(fā),深入講解動(dòng)態(tài) SQL 的常用標(biāo)簽,并通過(guò)實(shí)例演示一對(duì)多、多對(duì)多等復(fù)雜關(guān)聯(lián)查詢的實(shí)現(xiàn),幫助你掌握 MyBatis 的進(jìn)階用法,感興趣的朋友一起看看吧
    2025-07-07

最新評(píng)論

峨山| 资兴市| 静乐县| 秭归县| 读书| 阿拉善右旗| 泰州市| 灵璧县| 石城县| 滁州市| 玉林市| 贵溪市| 乌审旗| 平和县| 醴陵市| 玉树县| 阆中市| 文化| 略阳县| 汝阳县| 奉节县| 临颍县| 扎赉特旗| 望城县| 闽侯县| 顺平县| 马龙县| 潜江市| 漾濞| 陆河县| 城口县| 克什克腾旗| 若羌县| 连平县| 凉城县| 德阳市| 鄂温| 武陟县| 察隅县| 虎林市| 哈尔滨市|