5-3 jmu-java-m05-使用Comparator接口排序 (10分)
该程序包含 (以下类名请严格按照要求来定义)

Person类:

属性:int id, String name, String birthDate。注意:定义时需按照顺序从上到下定义。

方法:构造方法(id, name, birthDate), id与birthDate的getter方法, name的getter/setter方法,Eclipse自动生成的tostring。

Student类继承自Person:

属性:int enrollmentYear, String clazzName。

方法:构造方法(id, name, birthdate, enrollmentYear, clazzName),建议使用super复用Person的构造函数。toString方法(包含两行,第一行为父类的toString方法,第二行为Student类自身属性的toString方法,具体格式见输出样例)

Teacher类继承自Person:

属性:String department, double salary。

方法: 构造方法(id, name, brithdate, department, salary),建议使用super复用Person的构造函数。toString方法(包含两行,第一行为父类的toString方法,第二行为Teacher类自身属性的toString方法,具体格式见输出样例)salary的getter方法,

PerComparatorDES类继承Comparator接口:

方法:compare方法:先比较name,按降序进行排序,如果name值一样,则按id降序进行排序。

PerComparatorAES类继承Comparator接口:

方法:compare方法:先比较name,按升序进行排序,如果name值一样,则按id升序进行排序。

TeaComparator类继承Comparator接口:

方法:compare方法:比较salary,并按其降序进行排序。

检验程序如下,请务必粘贴至main函数末尾进行检测(需要导入import java.lang.reflect.*;包)

Class interfaces1[] = PerComparatorDES.class.getInterfaces();
Class interfaces2[] = PerComparatorAES.class.getInterfaces();
Class interfaces3[] = TeaComparator.class.getInterfaces();
for(Class inf:interfaces1) {
System.out.println(inf);
}
for(Class inf:interfaces2) {
System.out.println(inf);
}
for(Class inf:interfaces3) {
System.out.println(inf);
}

main方法:

public static void main(String[] args) {

String[] types = {"Student","Teacher"};//输入种子seed,并用其初始化Random对象//输入对象生成数量n//以下是生成n个对象的循环//使用random.nextInt(2)从types数组中随机选取元素x并输出//根据x选择输入相应的参数//输出person集合进行降序排序并输出提示信息//输出排序后集合的toString//输出person集合进行升序排序并输出提示信息//输出排序后集合的toString//输出teacher集合进行salary降序排序并输出提示信息//输出排序后集合的toString//请在此粘贴上检验程序代码

}

输入格式:
随机数种子seed

产生对象数量n

n行,每行是每个对象的信息信息。

如果要生成Student对象则依次输入:姓名 出生日期 入学年份 班级

如果要生成Teacher对象则依次输入:姓名 出生日期 系 薪水

注意:每个对象的id为每次循环的序数,依次从0到n-1

输出格式:
n个对象的类型

Person集合降序排序后的提示信息

排序后n个对象的toString

Person集合升序排序后的提示信息

排序后n个对象的toString

Teacher集合salary降序排序后的提示信息

排序后集合的toString

输入样例:
3
6
Liz 1986-10-10 CS 2000
Tom 1978-05-07 CS 2500.5
Sally 2000-01-03 2018 Net01
Tom 1988-06-07 Mechanical 1990
Sally 2001-02-05 2019 Software02
Li 1978-05-07 cs 2400

输出样例:
Teacher
Teacher
Student
Teacher
Student
Teacher
afterSortDES:
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=4, name=Sally, birthDate=2001-02-05]
Student [enrollmentYear=2019, clazzName=Software02]
Person [id=2, name=Sally, birthDate=2000-01-03]
Student [enrollmentYear=2018, clazzName=Net01]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
afterSortAES:
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=2, name=Sally, birthDate=2000-01-03]
Student [enrollmentYear=2018, clazzName=Net01]
Person [id=4, name=Sally, birthDate=2001-02-05]
Student [enrollmentYear=2019, clazzName=Software02]
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
afterSortTeacher:
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
这里是检验程序输出

注意:样例输出不包含检验代码输出,提交时请务必添加检验代码。

作者
郑如滨
单位
集美大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


import java.util.*;
import java.lang.reflect.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ArrayList<Person> list =new ArrayList<>();ArrayList<Teacher> listt = new ArrayList<>();String[] types = {"Student","Teacher"};int seed=sc.nextInt();Random r = new Random(seed);//输入种子seed,并用其初始化Random对象int n=sc.nextInt();//输入对象生成数量nfor(int i=0;i<n;i++)//以下是生成n个对象的循环{String str =types[r.nextInt(2)];System.out.println(str);//使用random.nextInt(2)从types数组中随机选取元素x并输出//根据x选择输入相应的参数if(str.equals("Student")){String name=sc.next();String birthDate = sc.next();int enrollmentYear=sc.nextInt();String clazzName=sc.next();Student s = new Student(i,name,birthDate,enrollmentYear,clazzName); list.add(s);}else if(str.equals("Teacher")){String name=sc.next();String birthDate = sc.next();String department=sc.next();double salary=sc.nextDouble();Teacher t = new Teacher(i,name,birthDate,department,salary);list.add(t);listt.add(t);}}//输出person集合进行降序排序并输出提示信息//输出排序后集合的toStringSystem.out.println("afterSortDES:");Collections.sort(list,new PerComparatorDES());for(Person x:list){System.out.println(x);}//输出person集合进行升序排序并输出提示信息//输出排序后集合的toStringSystem.out.println("afterSortAES:");Collections.sort(list,new PerComparatorAES());for(Person y:list){System.out.println(y);}//输出teacher集合进行salary降序排序并输出提示信息//输出排序后集合的toStringSystem.out.println("afterSortTeacher:");Collections.sort(listt,new TeaComparator());for(Teacher z:listt){System.out.println(z);}//请在此粘贴上检验程序代码Class interfaces1[] = PerComparatorDES.class.getInterfaces();Class interfaces2[] = PerComparatorAES.class.getInterfaces();Class interfaces3[] = TeaComparator.class.getInterfaces();for(Class inf:interfaces1) {System.out.println(inf);}for(Class inf:interfaces2) {System.out.println(inf);}for(Class inf:interfaces3) {System.out.println(inf);}}
}
class Person{private int id;private String name;private String birthDate;public Person(int id, String name, String birthDate){this.id = id;this.name=name;this.birthDate=birthDate;}public int getId() {return id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getBirthDate() {return birthDate;}@Overridepublic String toString() {return "Person [id=" + getId() + ", name=" + getName() + ", birthDate=" + getBirthDate()+"]";}}
class Student extends Person{int enrollmentYear;String clazzName;public Student(int id, String name, String birthDate,int enrollmentYear,String clazzName){super(id, name, birthDate);//使用super复用Person的构造函数this.enrollmentYear=enrollmentYear;this.clazzName=clazzName;}public String toString(){return super.toString()+"\n"+ "Student [enrollmentYear="+enrollmentYear+", clazzName="+clazzName+"]";}
}
class Teacher extends Person
{String department;double salary;public Teacher(int id, String name, String birthDate,String department,double salary){super(id, name, birthDate);this.department=department;this.salary=salary;}public double getSalary() {return salary;}public String toString(){return super.toString()+"\n"+"Teacher [department="+department+", salary="+salary+"]";}
}
class PerComparatorDES implements Comparator<Person>{//先比较name,按降序进行排序,如果name值一样,则按id降序进行排序。public int compare(Person o1, Person o2) {if(o1.getName().compareTo(o2.getName())<0){    return 1;}else if(o1.getName().compareTo(o2.getName())>0){return -1;}else if(o1.getId()<o2.getId()){return 1;}else if(o1.getId()>o2.getId()){return -1;}return 0;}}class PerComparatorAES implements Comparator<Person>{//先比较name,按升序进行排序,如果name值一样,则按id升序进行排序。@Overridepublic int compare(Person o1, Person o2) {if(o1.getName().compareTo(o2.getName())>0){  return 1;}else if(o1.getName().compareTo(o2.getName())<0){return -1;}else if(o1.getId()>o2.getId()){return 1;}else if(o1.getId()<o2.getId()){return -1;}return 0;}}
class TeaComparator implements Comparator<Teacher>{//比较salary,并按其降序进行排序@Overridepublic int compare(Teacher o1, Teacher o2) {if(o1.getSalary()<o2.getSalary()){  return 1;}else if(o1.getSalary()>o2.getSalary()){return -1;}return 0;}
}

5-3 jmu-java-m05-使用Comparator接口排序 (10分)相关推荐

  1. 6-5 从键盘读入一串字符后去除首尾字符后的字符串按降序排序 (10 分)请编写函数Sort函数,将字符串中除首、尾字符外的其余字符按降序排列。函数接口定义:void Sort( char *

    6-5 从键盘读入一串字符后去除首尾字符后的字符串按降序排序 (10 分) 请编写函数Sort函数,将字符串中除首.尾字符外的其余字符按降序排列. 函数接口定义: void Sort( char *p ...

  2. Java之——利用Comparator接口对多个排序条件进行处理

    转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...

  3. Java Lambda简化Comparator接口匿名内部类写法

    Lambda简化Comparator接口匿名内部类写法 //Lambda简化Comparator接口匿名内部类写法public static void main(String[] args) {Lis ...

  4. Java如何实现Comparable 接口排序

    有时候我们会对集合中的对象进行排序,而且这个排序是根据自身系统的业务来排序的.这个时候需要自己重写排序的具体业务.在java中 我们可以实现Comparator接口,重写该接口的comapre方法即可 ...

  5. Java基础之Comparable接口和Comparator接口的比较

    前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...

  6. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Comparator 接口 , 对 ArrayList 集合中的元素排序无效 ; 打印之后没有进行排序 ; 错误代码就不贴出来了 , 随便搜索 ...

  7. Java 中类的比较与排序方法(应用Comparable接口与Comparator接口)通俗易懂

    引言 在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用Math.max().Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort( ...

  8. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  9. java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

    原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...

  10. java compareable接口_Java对象比较-Comparable和Comparator接口使用

    最近在学习贪心算法和动态规划的过程中,里面有一段自然排序的操作,顺便简单了解一下Java中对象比较后排序要使用的两个接口:Comparable和Comparator.如果是数字,直接比较就行,但是如果 ...

最新文章

  1. 错误---获取Input的值为空字符串
  2. 前端学习(1968)vue之电商管理系统电商系统之将不同的参数挂载到数据源上
  3. php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持
  4. 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!
  5. linux服务器搭建_Linux怎么搭建ftp服务器,Windows怎么访问?按此教程10分钟完成...
  6. 软件测试的知识点总结
  7. 一个APP从启动到主页面显示经历了哪些过程?跳槽薪资翻倍
  8. 联想Y9000P2021双SSD系统win10下ubantu20.04+ROS的安装(记录非教程)
  9. SQL:取 分组后 的 按时间倒序 的前5条数据
  10. 淘宝转化率突然下降怎么办?原来是这些原因
  11. Effective Java 2.0_中英文对照_Item 6
  12. cer openssl 转pem_HTTPS证书转换成PEM格式
  13. [AC自动机+dp] whu oj 1572 I - Cyy and Fzz
  14. Win32_DiskDrive 硬盘 参数说明
  15. 哥大计算机专业 世界排名,2020年哥伦比亚大学计算机系统排名
  16. springboot私人牙科诊所管理系统java maven idea
  17. 计算机图形学孔令德基础知识,欢迎访问 孔令德计算机图形学精品资源共享课课程网站...
  18. 29岁了还一事无成是人生的常态?
  19. C#如何获取本机IP地址,两种方法
  20. BootLoader这个玩意

热门文章

  1. 程序员租房福利! 最新 2018年上海公积金提取 租房提取
  2. Android开发之手机震动器
  3. 从图灵奖小插曲看50年来什么样的人工智能最受追捧
  4. 拉丁超立方抽样法(LHS)matlab程序,包含正态分布,对数正态分布等
  5. 百度旋转验证码识别平台接口文档
  6. Description Resource Path Location Type Cannot change version of project fac(导入maven项目出现红叉问题)...
  7. FinalShell连接VM出现channel is not opened.
  8. 安卓的个性化彩色二维码的完美实现
  9. 金蝶K3--生产领料单--更新销售订单编号
  10. PCB_焊盘工艺设计规范