经典题目 (锻炼编程能力)
定义 Employee类
- 定义MyDate 类 year , month , day( 相关get set tostring )
- 该类包含 属性name , sal , birthday , 其中birthday是MyDate类型
- 创建三个对象放入 AryyList中 ( 使用泛型 ) 对集合中的元素进行排序, 并遍历输出.
排序方式: 调用ArrayList 的sort 方法 , 传入Comparator对象[使用泛型] , 先按照name排序 , 如果 name相同, 则按生日日期的先后排序.
public static void main(String[] args) {
ArrayList<Employee> list = new ArrayList<Employee>();
list.add(new Employee("小红",5000,new MyDate(2004,9,18)));
list.add(new Employee("小红",6000,new MyDate(2001,7,12)));
list.add(new Employee("小红",5000,new MyDate(2000,5,20)));
list.sort(new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
//1. 先判断是否是同一个对象
if(!(o1 instanceof Employee && o2 instanceof Employee)){
return 0;
}
//2. 比较name 的值
int i = o1.getName().compareTo(o2.getName());
if (i!=0){
return i;
}
int yearMinus = o1.getBirthday().year - o2.getBirthday().year;
if (yearMinus != 0){
return yearMinus;
}
//===========================================
//4. 如果同年 , 判断月
int monMinus = o1.getBirthday().mon - o2.getBirthday().mon;
if(monMinus != 0 ){
return monMinus;
}
// 5. 如果同月 , 判断日;
return o1.getBirthday().day - o2.getBirthday().day;
}
});
}
下面就是定义的Employee类 和 MyDate类不做演示
==========================================================
那么问题来了 , 如果名字相同 我们大部分是在对日期进行比较, 我们是否可以将整个日期的比较 封装起来, 放在MyDate里 , 让MyDate 类 去实现Compareble这个接口 重写
compareTo这个方法 , 从而实现代码的便捷性
开始进行修改上面的都不改变
list.sort(new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
//1. 先判断是否是同一个对象
if(!(o1 instanceof Employee && o2 instanceof Employee)){
return 0;
}
//2. 比较name 的值
int i = o1.getName().compareTo(o2.getName());
if (i!=0){
return i;
}
return o1.getBirthday().compareTo(o2);
}
});
//MyDate类的实现
class MyDate implements Comparable<Employee>{
int year;
int mon;
int day;
public MyDate(int year, int mon, int day) {
this.year = year;
this.mon = mon;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMon() {
return mon;
}
public void setMon(int mon) {
this.mon = mon;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "MyDate{" +
"year=" + year +
", mon=" + mon +
", day=" + day +
'}';
}
@Override
public int compareTo(Employee o) {
//===========================================
//3. 如果名字相同 , 判断年
int yearMinus = this.year - o.getBirthday().year;
if (yearMinus != 0){
return yearMinus;
}
//===========================================
//4. 如果同年 , 判断月
int monMinus = this.mon - o.getBirthday().mon;
if(monMinus != 0 ){
return monMinus;
}
// 5. 如果同月 , 判断日;
return this.day - o.getBirthday().day;
}
}