另一方面,概要Comparable和Comparator都用于实现集合中元素的比较、排序。 Comparable是在集合中定义的方法实现的排序,位于java.lang下。 Comparator是在集合外部实现的排序,位于java.util下。 Comparable是一种接口,对象本身已经支持自我比较所需的实现,如String和Integer,用于完成大小比较操作。 也可以实现Comparable接口,以便在将自定义类添加到list容器后对其进行排序。 按Collections类的sort方法排序时,如果不指定Comparator,则会按自然顺序排序。 自然顺序是指实现Comparable接口设置的排序方式。
Comparator是一个专用比较器,如果此对象不支持自比较,或者自比较函数不符合要求,则可以编写比较器来比较两个对象之间的大小。 Comparator展示了一种策略模型(strategy design pattern ),它在一个策略对象(strategy object )中更改对象本身的行为,而不是更改对象本身。 总之,Comparable是自己完成比较,Comparator是外接程序的实现比较。
上述部分转载于http://www.void cn.com/article/p-wotrtoif-uq.html。 在这个博客上,关于Comparable和Comparator的区别,我觉得文字部分的描写很详细很清晰,所以不敢复印。 关于Comparator,以下例子是我自己写的,如果有错误的地方请再指出来。
二.实例
Comparable的用法:
包测试;
publicclassstudentimplementscomparable {
//学生姓名
私有字符串名称;
//学生的年龄
私有输入;
公共字符串获取名称
return name;
}
公共void set name (string name ) {
this.name=name;
}
公共获取页面() {
返回age;
}
公共语音设置(intage ) {
this.age=age;
}
@Override
公共公司到(studento ) {
if(this.ageo.getage () ) ) ) ) ) )。
返回1; //从低到高
}else {
返回- 1;
}
//return 0;
}
}
测试类:
包测试;
公共类测试1 {
publicstaticvoidmain (string [ ] args ) {
Student s=new Student (;
s.setage(12;
s.setname (三);
Student s1=new Student (;
S1.setage(15;
s1.setName ()精明的母鸡;
s.comPareto(S1;
Student [] stuarray={s,s1};
Java.util.Arrays.sort(stuArray );
students tu : stu阵列(for ) {
system.out.println(stu.getname (),' stu.getAge ) );
}
}
}
计算机的使用方法:
包测试;
公共类student1{
私有字符串名称;
私有输入;
公共student1(string name,int age ) {
this.name=name;
this.age=age;
}
公共字符串获取名称
return name;
}
公共void set name (string name ) {
this.name=name;
}
公共获取页面() {
返回age;
}
公共语音设置(intage ) {
this.age=age;
}
}
包测试;
import java.util.Comparator;
公共类student 1计算机辅助计算机{
@Override
publicintcompare(student1O1,Student1 o2 ) {
if(O1.getname ().com Pareto (O2.getname ) )0) {
返回1;
}else{
if(O1.getage () o2.getAge ) ) }
返回1; //从低到高
}else{
返回- 1;
}
//return -1;
}
/*if(O1.getage () o2.getAge ) ) ) )。
返回1; //从低到高
}else{
返回- 1;
) /
}
}
测试类:
包测试;
公共类测试1 {
publicstaticvoidmain (string [ ] args ) {
sudent1[ ] stu1={ newstudent1(PGD dhn ),26 )、newstudent1(,15 )、newstudent1),18 )和new student1) )。
sudent1comparatorsc=new student1comparator (;
Java.util.Arrays.sort(stu1,sc );
for(student1o:stu1) {
system.out.println(O3.getname (),' o3.getAge ) );
}
}
}