在某次考试中,学生的成绩信息如下: 姓名 年龄 成绩 Tom 2090 Jerry 2295 John 20100 Lily 22100 Lucy 2290 Kevin 2290 请分别用Comparable和Comparator两个接口对以上同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序,成绩和年龄都一样,则按照姓名的字典顺序排序。
参考答案
package cn.Work1206.hooong01;publicclassStudent{private String name;privateint Chinese;privateint English;publicStudent(){}publicStudent(String name,int chinese,int english){this.name = name;
Chinese = chinese;
English = english;}public String getName(){return name;}publicvoidsetName(String name){this.name = name;}publicintgetChinese(){return Chinese;}publicvoidsetChinese(int chinese){
Chinese = chinese;}publicintgetEnglish(){return English;}publicvoidsetEnglish(int english){
English = english;}@Overridepublic String toString(){return"Student{"+"name='"+ name +'\''+", Chinese="+ Chinese +", English="+ English +'}';}@Overridepublicbooleanequals(Object o){if(this== o)returntrue;if(o == null ||getClass()!= o.getClass())returnfalse;
Student student =(Student) o;if(Chinese != student.Chinese)returnfalse;if(English != student.English)returnfalse;return name != null ? name.equals(student.name): student.name == null;}@OverridepublicinthashCode(){int result = name != null ? name.hashCode():0;
result =31* result + Chinese;
result =31* result + English;return result;}}package cn.Work1206.hooong01;import java.util.Collection;import java.util.Comparator;import java.util.TreeSet;/*
在某次考试中,学生的成绩信息如下:
姓名 年龄 成绩 22 95 22 100 22 90 22 90
请分别用Comparable和Comparator两个接口对以上同学的成绩做降序排序,
如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序,
成绩和年龄都一样,则按照姓名的字典顺序排序。
*/publicclassDemo06{publicstaticvoidmain(String[] args){
TreeSet<Student> students =newTreeSet<>(newComparator<Student>(){@Overridepublicintcompare(Student o1, Student o2){int i = o1.getChinese()+ o1.getEnglish()- o2.getChinese()- o2.getEnglish();int i1 = i ==0? o1.getName().compareTo(o2.getName()): i;return i1;}});
students.add(newStudent("Tom",20,90));
students.add(newStudent("John",20,100));
students.add(newStudent("Lily",22,100));
students.add(newStudent("Lucy",22,90));
students.add(newStudent("Kevin",22,90));
students.add(newStudent("Jerry",22,95));for(Student student : students){
System.out.println(student);}}}