java使用compareTo實(shí)現(xiàn)一個(gè)類(lèi)的對(duì)象之間比較大小操作
首先定義一個(gè)對(duì)象,注意這個(gè)對(duì)象必須實(shí)現(xiàn)Comparable接口,并重寫(xiě)這個(gè)接口的compareTo方法
package cn.demo; public class Student implements Comparable{ private int number=0; //學(xué)號(hào) private String name=""; //學(xué)生姓名 private String gender=""; //性別 public int getNumber(){ return number; } public void setNumber(int number){ this.number=number; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public String getGender(){ return gender; } public void setGender(String gender){ this.gender=gender; } public int compareTo(Object obj){ Student student=(Student)obj; if(this.number==student.number){ return 0; //如果學(xué)號(hào)相同,那么兩者就是相等的 }else if(this.number>student.getNumber()){ return 1; //如果這個(gè)學(xué)生的學(xué)號(hào)大于傳入學(xué)生的學(xué)號(hào) }else{ return -1; //如果這個(gè)學(xué)生的學(xué)號(hào)小于傳入學(xué)生的學(xué)號(hào) } } }
在上面的重寫(xiě)方法中標(biāo)紅的地方,如果是小于號(hào),則是按照降序排列,但是在我貼上去的代碼,則是按升序排列
接下來(lái)就是測(cè)試類(lèi)了:
package cn.demo; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; public class Test { public static void main(String[] args) { Student student1=new Student(); student1.setNumber(5); Student student2=new Student(); student2.setNumber(2); Student student3=new Student(); student3.setNumber(1); Student student4=new Student(); student4.setNumber(4); ArrayList<Student> list=new ArrayList<Student>(); list.add(student1); list.add(student2); list.add(student3); list.add(student4); System.out.println("-------排序前-------"); Iterator<Student> iterator=list.iterator(); while(iterator.hasNext()){ Student stu=iterator.next(); System.out.println(stu.getNumber()); } //使用Collections的sort方法對(duì)list進(jìn)行排序 System.out.println("-------排序后-------"); Collections.sort(list); iterator=list.iterator(); while(iterator.hasNext()){ Student stu=iterator.next(); System.out.println(stu.getNumber()); } } }
如上所示,可以直接使用collections的sort方法進(jìn)行排序
-------排序前------- 5 2 1 4 -------排序后------- 5 4 2 1
補(bǔ)充知識(shí):【JAVA】用Comparable接口學(xué)生的成績(jī)做降序排序!請(qǐng)正確指定泛型;用Comparator實(shí)現(xiàn)按照姓名排序,請(qǐng)正確指定泛型!
創(chuàng)建四個(gè)學(xué)生信息,分別包含姓名(String) , 年齡(int) ,分?jǐn)?shù)(double)
(1)用Comparable接口對(duì)下列四位同學(xué)的成績(jī)做降序排序, 如果成績(jī)一樣,那在成績(jī)排序的基礎(chǔ)上按照年齡由小到大排序,請(qǐng)正確指定泛型;
(2)用Comparator實(shí)現(xiàn)按照姓名排序,請(qǐng)正確指定泛型。
//定義學(xué)生類(lèi),并實(shí)現(xiàn)Comparable接口<定義Student類(lèi)型> public class Student implements Comparable<Student>{ private String name; private int age; private double grade; public Student() { } public Student(String name, int age, double grade) { this.name = name; this.age = age; this.grade = grade; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getGrade() { return grade; } public void setGrade(double grade) { this.grade = grade; } @Override public String toString() { return "Student [姓名 :" + name + " 年齡 :" + age + " 分?jǐn)?shù)" + grade + "]"; } /** * 用Comparable接口對(duì)下列四位同學(xué)的成績(jī)做降序排序, * 如果成績(jī)一樣,那在成績(jī)排序的基礎(chǔ)上按照年齡由小到大排序。請(qǐng)正確指定泛型 * @param o * @return */ @Override public int compareTo(Student o) { if(Double.compare(this.getGrade() , o.getGrade()) != 0){ if(Double.compare(this.getGrade() , o.getGrade()) > 0){ return 1; }else { return -1; } } return this.getAge() - o.getAge(); } }
*定義Student類(lèi),聲明基本的屬性,方法及完成對(duì)Comparable接口的實(shí)現(xiàn),實(shí)現(xiàn)“對(duì)成績(jī)實(shí)現(xiàn)降序,如果成績(jī)一樣,在成績(jī)排序的基礎(chǔ)上按照年齡由大到小的排序”的結(jié)果。
public class Task { public static void main(String[] args) { //定義四個(gè)學(xué)生對(duì)象 Student[] s1 = new Student[4]; s1[0] = new Student("liusan" , 20 , 90.0); s1[1] = new Student("lisi" , 22 , 90.0); s1[2] = new Student("wangwu" , 20 , 99.0); s1[3] = new Student("sunliu" , 22 , 100.0); Arrays.sort(s1); System.out.println(Arrays.toString(s1)); System.out.println("=================="); //用Comparator實(shí)現(xiàn)按照姓名排序,請(qǐng)正確指定泛型 Arrays.sort(s1, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } }); System.out.println(Arrays.toString(s1)); } }
以上這篇java使用compareTo實(shí)現(xiàn)一個(gè)類(lèi)的對(duì)象之間比較大小操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java中compareTo方法使用小結(jié)
- Java中BigDecimal的equals方法和compareTo方法的區(qū)別詳析
- Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compareTo()??)
- Java compareTo用法詳解
- JavaSE中compare、compareTo的區(qū)別
- Java 基礎(chǔ):string中的compareTo方法
- java compare compareTo方法區(qū)別詳解
- java compareTo和compare方法比較詳解
- Java中替代equals,compareTo和toString的方法
- Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)
- 詳解java中保持compareTo和equals同步
- JAVA中compareTo方法的使用小結(jié)
相關(guān)文章
SpringCloud2020.0.x版UnderTow AccessLog相關(guān)配置簡(jiǎn)介
本文詳細(xì)介紹了SpringCloud中AccessLog的相關(guān)配置,我們可以根據(jù)文中的相關(guān)數(shù)據(jù)配置出所需的AccessLog的信息以及格式,感興趣的小伙伴可以參考一下2021-08-08java 父類(lèi)子類(lèi)有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了java 父類(lèi)子類(lèi)有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09java開(kāi)發(fā)CPU流水線與指令亂序執(zhí)行詳解
這篇文章主要為大家介紹了java開(kāi)發(fā)CPU流水線與指令亂序執(zhí)行詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09SpringMVC Restful api接口實(shí)現(xiàn)的代碼
本篇文章主要介紹了SpringMVC Restful api接口實(shí)現(xiàn)的代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09使用Postman傳遞arraylist數(shù)據(jù)給springboot方式
這篇文章主要介紹了使用Postman傳遞arraylist數(shù)據(jù)給springboot方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12