完整题目如下:
定义Employee类
(1)该类包含:private成员变量name,sal,birthday,其中birthday为MyDate类的对象;
(2)为每一个属性定义getter,setter方法;
(3)重写toString方法输出name,sal,birthday
(4)MyDate类包含:private成员变量year,month,year;并为每一个属性定义getter,setter方法;
(5)创建该类的3个对象,并把这些对象放入ArrayList集合中(ArrayList需使用泛型来定义),对集合中的元素进行排序,并遍历输;
(6)排序方式:调用ArrayList的sort方法,传入Comparator对象[使用泛型],先按照name排序,如果name相同,则按生日日期的先后排序。
第一步根据题目首先创建一个Employee的类,其中包含的属性,其中birthday为MyDate类的对象,这里是应该注意的!!
class Employee implements Comparable<Employee> {//该类实现Comparable接口,因为要进行比较
private String name;
private int sal;
private MyDate birthday;
public Employee(String name, int sal, MyDate birthday) {//带参数构造方法
super();
this.name = name;
this.sal = sal;
this.birthday = birthday;
}
//为每一个属性定义getter,setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public MyDate getBirthday() {
return birthday;
}
public void setBirthday(MyDate birthday) {
this.birthday = birthday;
}
//覆盖tostring方法
public String toString() {
return this.name+"--"+this.sal+"--"+this.birthday;
}
//覆盖compareTo方法
@Override
public int compareTo(Employee o) {
return this.name.compareTo(o.name);//比较姓名
}
}
第二步:,创建MyDate类并且MyDate类包含:private成员变量year,month,year;并为每一个属性定义getter,setter方法;
class MyDate implements Comparable<MyDate>{//MyDate也要实现Comparable接口!!因为年月日要进行比较
private int year;d
private int month;
private int day;
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public MyDate() {
super();
}
public MyDate(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return this.year+"--"+this.month+"--"+this.day;
}
@Override
public int compareTo(MyDate o) {//实现该方法!!这里是重点!!
int years=this.year-o.year;//先比较年
if(years!=0) {
return years;
}
int months=this.month-o.month;//再比较月
if(months!=0) {
return months;
}
return this.day-o.day;//最后比较日
}
}
第三步: 创建该类的3个对象,并把这些对象放入ArrayList集合中(ArrayList需使用泛型来定义)
public class MyEmployeeTest{
public static void main(String[] args) {
Employee e1=new Employee("tom",4000,new MyDate(2002,12,25));//这个地方需要注意!!
Employee e2=new Employee("fox", 5000,new MyDate(2003, 07, 31));
Employee e3=new Employee("james", 5800, new MyDate(2004, 11, 15));
ArrayList<Employee> arrayList=new ArrayList<>();
arrayList.add(e1);//并把这些对象放入ArrayList集合中
arrayList.add(e2);
arrayList.add(e3);
第四步也是最后一步:排序方式:调用ArrayList的sort方法,传入Comparator对象[使用泛型],先按照name排序,如果name相同,则按生日日期的先后排序。
arrayList.sort(new Comparator<Employee>()
@Override
public int compare(Employee s1, Employee s2) {
int i=s1.getName().compareTo(s2.getName());
if(i!=0) {
return i;
}
return s1.getBirthday().compareTo(s2.getBirthday());
}
});
//遍历
arrayList.forEach(employee->System.out.println(employee));
}
运行结果如下:名字不同,先按照名字排序
运行结果如下:名字相同,按照生日进行排序