首先定义一个对象,注意这个对象必须实现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实现一个类的对象之间比较大小操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。