经典题目 (锻炼编程能力)

定义 Employee

  1. 定义MyDate year , month , day( 相关get set tostring )
  2. 该类包含 属性name , sal , birthday , 其中birthdayMyDate类型
  3. 创建三个对象放入 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;
}
}




 

posted on 2022-03-19 22:57  我要当程序源  阅读(28)  评论(0编辑  收藏  举报

导航