在Java中如何對(duì)類(lèi)進(jìn)行排序詳解
結(jié)論:
import java.util.Arrays; class Person implements Comparable<Person>{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Person o) { return this.age - o.age; } } public class Main{ public static void main(String args[]){ Person[] arr = new Person[3]; arr[0] = new Person("zhang", 10); arr[1] = new Person("wang", 13); arr[2] = new Person("li", 11); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } }
解析:
我們知道當(dāng)我們定義了一個(gè)整型數(shù)組然后想對(duì)其進(jìn)行排序時(shí)就可以使用 Arrays.toString() 方法對(duì)數(shù)組進(jìn)行排序,系統(tǒng)會(huì)默認(rèn)將其按照升序排列。
public static void main(String args[]){ int[] arr = {2,6,3,0,5,2}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
當(dāng)我們需要對(duì)類(lèi)進(jìn)行排序應(yīng)該怎么做呢?
首先我們先定義一個(gè)類(lèi):
class Person{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
我們現(xiàn)在有了這個(gè)類(lèi)之后就可以對(duì)他進(jìn)行排序了,此時(shí)我們可以先嘗試直接對(duì)類(lèi)進(jìn)行排序操作:
public static void main(String args[]){ Person[] arr = new Person[3]; arr[0] = new Person("zhang", 10); arr[1] = new Person("wang", 13); arr[2] = new Person("li", 11); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
雖然報(bào)錯(cuò)了但是我們從報(bào)錯(cuò)信息中可以找到這一塊代碼:
從中我們可以清晰的看到它將我們的代排序類(lèi)強(qiáng)制類(lèi)型轉(zhuǎn)換成了 Comparable 而我們的類(lèi)根本就不能進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換成Comparable從而引起了錯(cuò)誤。
我們既然已經(jīng)知道了哪里出現(xiàn)了錯(cuò)誤那么改掉之后我們就可以實(shí)現(xiàn)使用 Arrays.toString() 方法來(lái)排序類(lèi)。
此時(shí)我們先修改我們的類(lèi),使其實(shí)現(xiàn) Comparable 接口:
緊接著再類(lèi)中對(duì) compareTo() 方法進(jìn)行重寫(xiě)。(假如我們用年齡來(lái)排序 compareTo() 方法的返回值為:大于返回大于0的數(shù);小于返回小于零的數(shù);等于返回0)
class Person implements Comparable<Person>{ public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Person o) { return this.age - o.age; } }
運(yùn)行之后可以看到結(jié)果按照年齡升序排序。
總結(jié)
到此這篇關(guān)于在Java中如何對(duì)類(lèi)進(jìn)行排序的文章就介紹到這了,更多相關(guān)Java對(duì)類(lèi)排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽(tīng)文件夾是否有新文件增加并上傳服務(wù)器功能
本文中主要陳述一種實(shí)時(shí)監(jiān)聽(tīng)文件夾中是否有文件增加的功能,可用于實(shí)際文件上傳功能的開(kāi)發(fā)。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-09-09nacos服務(wù)注冊(cè)服務(wù)發(fā)現(xiàn)依賴(lài)配置詳解
這篇文章主要為大家介紹了nacos服務(wù)注冊(cè)服務(wù)發(fā)現(xiàn)依賴(lài)配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07靜態(tài)方法中調(diào)用Spring注入過(guò)程解析
這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11MyBatis框架迭代器模式實(shí)現(xiàn)原理解析
這篇文章主要介紹了MyBatis框架迭代器模式實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡,選擇和插入排序算法
這篇文章主要為大家介紹了Java冒泡,選擇和插入排序算法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01struts2入門(mén)(搭建環(huán)境、配置、示例)詳解
這篇文章主要介紹了struts2入門(mén)(搭建環(huán)境、配置、示例)詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Java中Caffeine本地緩存項(xiàng)目實(shí)例
這篇文章主要介紹了Java中Caffeine本地緩存項(xiàng)目實(shí)例,Caffeine是一個(gè)高性能Java 緩存庫(kù),使用Java8對(duì)Guava緩存重寫(xiě)版本,在Spring Boot 2.0中將取代Guava,使用spring.cache.cache-names屬性可以在啟動(dòng)時(shí)創(chuàng)建緩存,需要的朋友可以參考下2023-10-10