java使用compareTo实现一个类的对象之间比较大小操作

 更新时间:2020年09月16日 09:40:31   作者:领头阳_  
这篇文章主要介绍了java使用compareTo实现一个类的对象之间比较大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

首先定义一个对象,注意这个对象必须实现Comparable接口,并重写这个接口的compareTo方法

package cn.demo;
 
public class Student implements Comparable{
 private int number=0;  //学号
 private String name="";  //学生姓名
 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;  //如果学号相同,那么两者就是相等的
 }else if(this.number>student.getNumber()){ 
  return 1;  //如果这个学生的学号大于传入学生的学号
 }else{ 
  return -1;  //如果这个学生的学号小于传入学生的学号
 }
 }
}

在上面的重写方法中标红的地方,如果是小于号,则是按照降序排列,但是在我贴上去的代码,则是按升序排列

接下来就是测试类了:

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方法对list进行排序
 System.out.println("-------排序后-------");
 Collections.sort(list); 
 iterator=list.iterator();
 while(iterator.hasNext()){
  Student stu=iterator.next();
  System.out.println(stu.getNumber());
 } 
 
 }
}

如上所示,可以直接使用collections的sort方法进行排序

-------排序前-------
5
2
1
4
-------排序后-------
5
4
2
1

补充知识:【JAVA】用Comparable接口学生的成绩做降序排序!请正确指定泛型;用Comparator实现按照姓名排序,请正确指定泛型!

创建四个学生信息,分别包含姓名(String) , 年龄(int) ,分数(double)

(1)用Comparable接口对下列四位同学的成绩做降序排序, 如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序,请正确指定泛型;

(2)用Comparator实现按照姓名排序,请正确指定泛型。

//定义学生类,并实现Comparable接口<定义Student类型>
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 +
        " 分数" + grade + "]";
  }


  /**
   * 用Comparable接口对下列四位同学的成绩做降序排序,
   * 如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。请正确指定泛型
   * @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类,声明基本的属性,方法及完成对Comparable接口的实现,实现“对成绩实现降序,如果成绩一样,在成绩排序的基础上按照年龄由大到小的排序”的结果。

public class Task {

  public static void main(String[] args) {

 //定义四个学生对象
    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实现按照姓名排序,请正确指定泛型
    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实现一个类的对象之间比较大小操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在SpringBoot中使用HATEOAS的方法

    在SpringBoot中使用HATEOAS的方法

    这篇文章主要介绍了在SpringBoot中使用HATEOAS的方法,HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题,下文更多相关介绍,需要的小伙伴可以参考一下
    2022-05-05
  • springboot集成druid连接池配置的方法

    springboot集成druid连接池配置的方法

    这篇文章主要介绍了springboot集成druid连接池配置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java switch使用原理及实例解析

    Java switch使用原理及实例解析

    这篇文章主要介绍了Java switch使用及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • jdk7 中HashMap的知识点总结

    jdk7 中HashMap的知识点总结

    HashMap的原理是老生常谈了,不作仔细解说。一句话概括为HashMap是一个散列表,它存储的内容是键值对(key-value)映射。这篇文章主要总结了关于jdk7 中HashMap的知识点,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • 新版Android Studio修改jdk版本的简单步骤

    新版Android Studio修改jdk版本的简单步骤

    这篇文章主要介绍了新版Android Studio修改jdk版本的简单步骤,升级Android Studio后,JDK版本设置选项消失,可以通过Settings面板进入Gradle设置,修改GradleJDK路径来解决问题,需要的朋友可以参考下
    2025-03-03
  • java Class.getSimpleName() 详解及用法

    java Class.getSimpleName() 详解及用法

    这篇文章主要介绍了java Class.getSimpleName() 详解及用法的相关资料,需要的朋友可以参考下
    2017-02-02
  • 通过代码实例深入解析Java重写和重载

    通过代码实例深入解析Java重写和重载

    这篇文章主要介绍了通过代码实例深入解析Java重写和重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot启动时执行初始化操作的几种方式

    SpringBoot启动时执行初始化操作的几种方式

    项目中,经常需要在启动过程中初始化一些数据,如从数据库读取一些配置初始化,或从数据库读取一些热点数据到redis进行初始化缓存,本文给大家介绍了SpringBoot启动时执行初始化操作的几种方式的相关资料,需要的朋友可以参考下
    2024-05-05
  • 浅谈Java获得多线程的返回结果方式(3种)

    浅谈Java获得多线程的返回结果方式(3种)

    这篇文章主要介绍了浅谈Java获得多线程的返回结果方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 详解Java中Iterable与Iterator用法

    详解Java中Iterable与Iterator用法

    在本文中小编给大家分享了关于Java中Iterable与Iterator的用法知识点内容,有兴趣的朋友们可以学习下。
    2018-10-10

最新评论