使用Java如何對(duì)復(fù)雜的數(shù)據(jù)類型排序和比大小
一.對(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"); } } }
我們可以看見(jiàn)編譯器的報(bào)錯(cuò)提示,這是因?yàn)镴ava提供的運(yùn)算符號(hào)只能識(shí)別操作簡(jiǎn)單的數(shù)據(jù)類型,對(duì)于我們自定義的Student類是無(wú)法識(shí)別的
Comparable接口
在這種情況下,我們就可以使用我們之前的講解的接口的知識(shí),我們可以調(diào)用Comparable接口,然后重寫(xiě)其中的compareTo方法,在使用接口的時(shí)候需要注意聲明你需要比較的類型,也就是接口后尖括號(hào)內(nèi)的內(nèi)容
compareTo方法
我們?cè)谶@里對(duì)接口中的compareTo方法進(jìn)行重寫(xiě)后,在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)行比大小,只需要重新重寫(xiě)這個(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ò)誤信息,打開(kāi)源碼觀察會(huì)發(fā)現(xiàn),編譯器這里還是用到了Comparable接口
那我們還是像剛才一樣調(diào)用Comparable接口,然后我們給出明確的排序規(guī)則,再寫(xiě)一個(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接口,然后重寫(xiě)其中的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)文章
關(guān)于Mybatis插入對(duì)象時(shí)空值的處理
這篇文章主要介紹了關(guān)于Mybatis插入對(duì)象時(shí)空值的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06SpringMVC整合,出現(xiàn)注解沒(méi)有起作用的情況處理
這篇文章主要介紹了SpringMVC整合,出現(xiàn)注解沒(méi)有起作用的情況及處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-05-05SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式小結(jié)
在使用SpringBoot過(guò)程中,我們只需要引入相關(guān)依賴,然后在main方法中調(diào)用SpringBootApplication.run(應(yīng)用程序啟動(dòng)類.class)方法即可,那么SpringBoot是如何獲取當(dāng)前運(yùn)行環(huán)境呢,接下來(lái)由小編給大家介紹一下SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式,需要的朋友可以參考下2024-01-01java中VO PO DTO POJO BO DO對(duì)象的應(yīng)用場(chǎng)景及使用
文章介紹了Java開(kāi)發(fā)中常用的幾種對(duì)象類型及其應(yīng)用場(chǎng)景,包括VO、PO、DTO、POJO、BO和DO等,并通過(guò)示例說(shuō)明了它們?cè)诓煌瑘?chǎng)景下的應(yīng)用2025-01-01Springboot過(guò)濾器禁止ip頻繁訪問(wèn)功能實(shí)現(xiàn)
這篇文章主要介紹了Springboot過(guò)濾器禁止ip頻繁訪問(wèn)功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04SpringBoot3實(shí)現(xiàn)上傳圖片并返回路徑讓前端顯示圖片
這篇文章主要介紹了SpringBoot3實(shí)現(xiàn)上傳圖片并返回路徑讓前端顯示圖片,文中通過(guò)圖文和代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12java計(jì)算值所占的百分比,結(jié)果為100%問(wèn)題
這篇文章主要介紹了java計(jì)算值所占的百分比,結(jié)果為100%問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11ConcurrentMap.putIfAbsent(key,value)用法實(shí)例
這篇文章主要介紹了ConcurrentMap.putIfAbsent(key,value)用法實(shí)例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02對(duì)Java ArrayList的自動(dòng)擴(kuò)容機(jī)制示例講解
今天小編就為大家分享一篇對(duì)Java ArrayList的自動(dòng)擴(kuò)容機(jī)制示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10