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

网友投稿 506 2022-11-22


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 list=new ArrayList();

list.add(student1);

list.add(student2);

list.add(student3);

list.add(student4);

System.out.println("-------排序前-------");

Iterator 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{

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 +

" 年龄 BXlZTMXTnA:" + 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() {

@Override

public int compare(Student o1, Student o2) {

return o1.getName().compareTo(o2.getName());

}

});

System.out.println(Arrays.toString(s1));

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java(包括springboot)读取resources下文件方式实现
下一篇:IntelliJ IDEA 2019.3激活破解的详细方法(亲测有效,可激活至 2089 年)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~