一.两者都是为了实现对对象排序更加方便,而产生的。实现Compareable与Comparator,目的就是为了可以直接对自定义对象进行排序。
Compareable接口
- 实现 Compareable接口的对象要重写t.compareto(t1);方法。此时就相当与赋予了该对象了可以比较的功能。
Compareable接口使用实例
class Students implements Comparable<Students>{
int age;
String name;
Students(int age,String name){
this.age=age; this.name=name;
}
@Override
//重写compareTo方法按Students的年龄排序
public int compareTo(Students o) {
if (this.age-o.age>0)
return 1;
if (this.age-o.age<0)
return -1;
else
return 0;
}
@Override
public String toString() {
return "Students{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
public class TsetCompareable {
public static void main(String args[]){
List<Students> list =new ArrayList();
list.add(new Students(10,"zhangsan"));
list.add(new Students(18,"lisi"));
list.add(new Students(9,"wangwu"));
Collections.sort(list);
System.out.println(list);
}
}
输出结果
Comparator接口使用实例
- 它是一个比较器。比如我们要给学生类排序可以写一个学生类的比较器。
- 实现了Comparator接口的实现类就要重写compare(T t,T t1);方法
Comparator接口使用实例
class Student {
int age;
String name;
Student(int age,String name){
this.age=age; this.name=name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
//学生比较器
class StudentComparator implements Comparator<Student>{
//重写compare方法
@Override
public int compare(Student student, Student student1) {
if (student.age-student1.age>0)
return 1;
if (student.age-student1.age<0)
return -1;
else
return 0;
}
}
public class ComparatorTest{
public static void main(String args[]){
List<Student> list =new ArrayList();
list.add(new Student(10,"zhangsan"));
list.add(new Student(18,"lisi"));
list.add(new Student(9,"wangwu"));
Collections.sort(list,new StudentComparator());
System.out.println(list);
}
}
输出结果