Comparable接口和Comparator接口区别
来源:互联网 发布:c 在线客服系统源码 编辑:程序博客网 时间:2024/05/22 02:00
简单写下两种排序方法:
Comparable接口和Comparator接口,两个都是用来实现集合中元素的比较、排序的,只是两个接口使用的方式有些区别:
(1)、Comparable位于java.lang下。
接口中的方法有: int compareTo(Object obj)
Comparator位于java.util下
接口中的方法有两个:
Int compare(Object obj1,Object obj2)
Boolean equals(Object obj)
因为Comparable位于java.lang下显然默认的是Comparable下的方法。
(2)、Comparable是在集合内部定义的方法实现的排序
compareTo()方法是放在对象类里面的,
在集合内部现实 compareTo()的方法。
Comparator是在集合外部实现的排序,
compare()是放在比较对象的类外面的
需要在集合外定义 compare()的方法,也就是再写一个类,而且需要导入 java.util.Comparator类
(3)、在集合中,Collections.sort();方法排序。
在数组中用 Arrays.sort();方法进行排序。
(4)、自定义的类要加入List容器中后才能够排序,如果不指定Comparator,那么就实现 Comparable接口设定的排序方法即自然顺序排序。
(5)、Comparator是一个专用的比较器,当这个对象不支持自比较函数或者自比较函数不能满足要求时,可以写一个比较器来完成两个对象之间大小的比较。
(6)简单说;Comparable接口是一个对象本身已经支持自比较所需要实现的接口。
Comparator是一个另写一个外部类来实现的比较的接口。
例如:Student类实现Comparable接口。按照先按照age
进行排序,如果age相等时再按照name进行排序
代码如下:
public int compareTo(Student stu) {
RuleBasedCollator collator = (RuleBasedCollator) Collator.getInstance(Locale.CHINA);
// 根据元素的年龄排序从低到高,年龄相同时按照姓名排序从低到高
if(this.age<stu.getAge()){
return -1;
}
else if(this.age>stu.getAge()){
return 1;
}
else{
return collator.compare(this.getName(), stu.getName());
}
}
在main函数中,用Collections.sort()方法实现排序。
static List<Student> arr=new ArrayList<Student>();
Student stu1=new Student(1,"张一",23,"北京");
Student stu2=new Student(2,"王二",26,"河南");
Student stu3=new Student(3,"李三",24,"山东");
Student stu4=new Student(4,"张四",25,"北京");
arr.add(stu1);
arr.add(stu2);
arr.add(stu3);
arr.add(stu4);
Collections.sort(arr);
Comparable接口和Comparator接口,两个都是用来实现集合中元素的比较、排序的,只是两个接口使用的方式有些区别:
(1)、Comparable位于java.lang下。
接口中的方法有: int compareTo(Object obj)
Comparator位于java.util下
接口中的方法有两个:
Int compare(Object obj1,Object obj2)
Boolean equals(Object obj)
因为Comparable位于java.lang下显然默认的是Comparable下的方法。
(2)、Comparable是在集合内部定义的方法实现的排序
compareTo()方法是放在对象类里面的,
在集合内部现实 compareTo()的方法。
Comparator是在集合外部实现的排序,
compare()是放在比较对象的类外面的
需要在集合外定义 compare()的方法,也就是再写一个类,而且需要导入 java.util.Comparator类
(3)、在集合中,Collections.sort();方法排序。
在数组中用 Arrays.sort();方法进行排序。
(4)、自定义的类要加入List容器中后才能够排序,如果不指定Comparator,那么就实现 Comparable接口设定的排序方法即自然顺序排序。
(5)、Comparator是一个专用的比较器,当这个对象不支持自比较函数或者自比较函数不能满足要求时,可以写一个比较器来完成两个对象之间大小的比较。
(6)简单说;Comparable接口是一个对象本身已经支持自比较所需要实现的接口。
Comparator是一个另写一个外部类来实现的比较的接口。
例如:Student类实现Comparable接口。按照先按照age
进行排序,如果age相等时再按照name进行排序
代码如下:
public int compareTo(Student stu) {
RuleBasedCollator collator = (RuleBasedCollator) Collator.getInstance(Locale.CHINA);
// 根据元素的年龄排序从低到高,年龄相同时按照姓名排序从低到高
if(this.age<stu.getAge()){
return -1;
}
else if(this.age>stu.getAge()){
return 1;
}
else{
return collator.compare(this.getName(), stu.getName());
}
}
在main函数中,用Collections.sort()方法实现排序。
static List<Student> arr=new ArrayList<Student>();
Student stu1=new Student(1,"张一",23,"北京");
Student stu2=new Student(2,"王二",26,"河南");
Student stu3=new Student(3,"李三",24,"山东");
Student stu4=new Student(4,"张四",25,"北京");
arr.add(stu1);
arr.add(stu2);
arr.add(stu3);
arr.add(stu4);
Collections.sort(arr);
0 0
- Comparable接口和Comparator接口区别
- Comparable接口和Comparator接口的区别
- Comparable接口和Comparator接口的区别
- Comparator接口和Comparable接口的区别
- Comparator,Comparable接口区别
- Comparator和Comparable接口
- Comparable 和 Comparator接口
- Comparable和Comparator接口
- Comparator和Comparable接口
- Comparable和Comparator接口
- Comparable和Comparator接口
- Comparable和Comparator接口的区别
- Comparator和Comparable接口的区别
- Java comparable和Comparator接口的区别
- Comparable接口和Comparator接口
- Comparable接口和Comparator接口
- Comparable接口和Comparator接口
- Comparable接口和Comparator接口
- 想学好技术,不要做一个浮躁的人,请记住以下几点
- 筛法求素数!!!
- ubuntu 14.0 安装retext
- linux shell notes
- 某本c语言书
- Comparable接口和Comparator接口区别
- 常用时间复杂度
- php每日学习总结(9)
- java 中list,set,map集合的用法和区别
- Hibernate缓存机制和四种状态
- hdu 2120 Ice_cream's world I
- RoBa's blogProgramming, algorithm, and daily lifeRe: 真的ACM很有用么?
- hdu 2119 Matrix(二分最大匹配)
- leetcode Partition List