黑马程序员技术交流社区
标题:
Comparable和Comparator的区别
[打印本页]
作者:
贾波
时间:
2013-11-27 22:19
标题:
Comparable和Comparator的区别
Comparable和Comparator的区别
作者:
ysunday
时间:
2013-11-27 22:29
comparable接口是类实现的,比如Person,比如Student。实现这个接口是让类自身具备比较性(比如String自身具备比较性吧,Integer自身也有比较性)
comparator接口是让集合具备比较性。比如Set<String> set = new TreeSet<>(new Comparator(){});这个的意思就是让你这个集合按照你的比较器进行排序。
如果需要例子代码你再继续说就行
作者:
陪你等日出
时间:
2013-11-27 22:37
1. Comparable接口用于使一个类自身具备比较性,例如:
/*例如学生本来自身不具备比较性,但是想让其按照考试分数排序*/
class Student implements Comparable{
}
复制代码
Comparator接口为自定义一个比较器时实现,例如:
class MyComparator implements Comparator{
}
复制代码
2.Comparable 类里面的比较方法是compareTo方法,Comparator类里面的比较方法是compare,子类在实现这两个接口后,要覆盖这两个方法。
作者:
石头6004
时间:
2013-11-27 22:59
本帖最后由 石头6004 于 2013-11-27 23:00 编辑
Comparable和Comparator 都是用来实现集合中的排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。Comparable 是一个对象本身就已经支持自比较所需要实现的接,而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
下面是一段实现
comparator 的代码:
public class Demo {
comparator cl=new comparator();
public static void main(String[] args) {
Integer[] datas=new Integer[20];
Random rand=new Random();
for(int i=0;i<20;i++) {
datas[i]=new Integer(rand.nextInt(100));
}
Arrays.sort(datas);
System.out.println(Arrays.asList(datas));
}
}
class comparator implements Comparator {
public int compare(Object o1, Object o2) {
int value1= Math.abs(((Integer)o1).intValue());
int value2=Math.abs(((Integer)o2).intValue());
return value1>value2?1:(value1==value2?0:-1);
}
}
复制代码
作者:
容嬷嬷当年也是
时间:
2013-11-28 01:04
comparable& Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。
Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作)
而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2