您的位置:首页 > 编程语言 > Java开发

Java中Comparable与Comparator的区别

2017-06-20 18:54 260 查看


相同

Comparable和Comparator都是用来实现对象的比较、排序
要想对象比较、排序,都需要实现Comparable或Comparator接口
Comparable和Comparator都是Java的接口


区别

Comparator位于java.util包下,而Comparable位于java.lang包下
Comparable接口的实现是在类的内部(如 String、Integer已经实现了Comparable接口,自己就可以完成比较大小操作),Comparator接口的实现是在类的外部(可以理解为一个是自已完成比较,一个是外部程序实现比较)
实现Comparable接口要重写compareTo方法, 在compareTo方法里面实现比较
public class Student implements Comparable {
String name;
int age
public int compareTo(Student another) {
int i = 0;
i = name.compareTo(another.name);
if(i == 0) {
return age - another.age;
} else {
return i;
}
}
}
这时我们可以直接用 Collections.sort( StudentList ) 对其排序了.(
**只需传入要排序的列表**)

实现Comparator需要重写 compare 方法
public class Student{
String name;
int age
}
class StudentComparator implements Comparator {
public int compare(Student one, Student another) {
int i = 0;
i = one.name.compareTo(another.name);
if(i == 0) {
return one.age - another.age;
} else {
return i;          }
}
}
Collections.sort( StudentList , new StudentComparator()) 可以对其排序(
**不仅要传入待排序的列表,还要传入实现了Comparator的类的对象**)


总结

如果比较的方法只要用在一个类中,用该类实现Comparable接口就可以。
如果比较的方法在很多类中需要用到,就自己写个类实现Comparator接口,这样当要比较的时候把实现了Comparator接口的类传过去就可以,省得重复造轮子。这也是为什么Comparator会在java.util包下的原因。

使用Comparator的优点是:1.与实体类分离 2.方便应对多变的排序规则
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: