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

Java学习笔记 - 比较器Comparator

2017-09-15 15:13 363 查看
java中有两个比较器,Comparable与Comparator,都可以实现对Collection的比较
两者区别如下:
Comparable:
是在集合内部定义的方法实现的排序;
实现java.lang.Comparable接口,使你自己定义的类具备比较能力,这个接口只有一个方法compareTo

Comparator:
是在集合外部实现的排序
定义一个单独的类去实现Comparator接口,重写其中的compare方法

以上区别对代码直白的影响是,如果你希望写一个公用的比较方法,适用于多个类,就用Comparator;
如果不希望破坏类本身的功能结构,但是希望对其排序,那就单独拎出来写个比较方法,用Comparator;
反之用Coparable。

Comparable较简单,这里不再举例。以下是Comparator的代码示例。

package testJa;
import java.util.*;

public class ComparatorT implements Comparator{ //继承Comparator
@Override
public int compare(Object o1,Object o2){
int k1 = ((dataObj)o1).value;  //指定比较类中的元素,对于不同的结构体,此处可按情况更改。这里适用于"dataObj"
int k2 = ((dataObj)o2).value;
if (k1 > k2){
return 1; //大于时返回1,小于时返回-1,表示正序排列;反过来是反序排列: 比较规则。
}
else{
return -1;
}
}
public static void main(String [] args){  //测试函数,使用时可忽略
int len = 10, max = 20, i=0;
dataObj dos[] = new dataObj[len];
for(i=0;i<len;i++){
dos[i] = new dataObj(i,"");
}
Arrays.sort(dos, new ComparatorT()); //使用Arrays.sort来排序,第一参数是待排序列,第二参数就是重写的比较函数
}
}


dataObj结构体如下:

package testJa;

public class dataObj{
public int value;
public String source;
public dataObj(int value, String source){
this.value = value;
this.source = source;
}
}

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Comparator 继承