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-08
java 父類(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-09
java開(kāi)發(fā)CPU流水線與指令亂序執(zhí)行詳解
這篇文章主要為大家介紹了java開(kāi)發(fā)CPU流水線與指令亂序執(zhí)行詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
SpringMVC 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

