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实现一个类的对象之间比较大小操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现优雅停止线程的有效方法详解

    Java实现优雅停止线程的有效方法详解

    这篇文章主要为大家详细如何安全有效停止 Java 线程的,确保多线程应用程序平稳运行并实现最佳资源管理,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 浅析JDK和Tomcat的安装与配置方法

    浅析JDK和Tomcat的安装与配置方法

    这篇文章主要介绍了JDK和Tomcat的安装与配置方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-12-12
  • 简单操作实现Java jsp servlet文件上传过程解析

    简单操作实现Java jsp servlet文件上传过程解析

    这篇文章主要介绍了简单操作实现Java jsp servlet文件上传过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 详解Java Socket通信封装MIna框架

    详解Java Socket通信封装MIna框架

    Mina异步IO使用的Java底层JNI框架,Mina提供服务端和客户端,将我们的业务解耦开发,真正做到高内聚低耦合的思想。
    2021-06-06
  • Spring Data JPA中findOne()和getOne()用法

    Spring Data JPA中findOne()和getOne()用法

    这篇文章主要介绍了Spring Data JPA中findOne()和getOne()的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Spring JPA之save方法示例详解

    Spring JPA之save方法示例详解

    这篇文章主要为大家介绍了Spring JPA之save方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • JVM加载class文件的原理机制实例详解

    JVM加载class文件的原理机制实例详解

    Java是一种具有动态性的解释型语言,类(class)只有被加载到JVM后才能运行,接下来通过本文给大家介绍JVM加载class文件的原理机制详解,感兴趣的朋友一起看看吧
    2022-04-04
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    这篇文章主要介绍了Spring cloud gateway工作流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 使用@Valid 校验嵌套对象

    使用@Valid 校验嵌套对象

    这篇文章主要介绍了使用@Valid 校验嵌套对象方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 四步轻松搞定java web每天定时执行任务

    四步轻松搞定java web每天定时执行任务

    本篇文章主要介绍了四步轻松搞定java web每天定时执行任务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论