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的代码示例。
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
两者区别如下:
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学习笔记13--比较器(Comparable、Comparator)
- 【Java学习笔记】45:优先级队列PriorityQueue和比较器Comparator
- java学习笔记13--比较器(Comparable、Comparator)
- java学习笔记13--比较器(Comparable、Comparator)
- 【java学习笔记】栈,队列,Comparator比较器
- Java学习笔记13--比较器(Comparable、Comparator)
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记
- java学习笔记13--比较器(Comparable、Comparator)
- java学习笔记13--比较器(Comparable、Comparator)
- Java集合学习笔记(通过比较器对集合元素排序)
- java 学习笔记--Comparator中为什么其他类实现这个接口为什么没有复写equals(Object obj)这个方法?
- Java学习笔记--Comparable & Comparator
- 【Java常用类库】_比较器(Comparable、Comparator)笔记
- 学习笔记5:java 1.8 Predicate,Function,Supplier,Consumer,Comparator,Optional,Stream接口的使用
- 【Java常用类库】_比较器(Comparable、Comparator)笔记
- 【Java学习笔记】实现Comparator接口来进行字符串逆向排序
- Java学习笔记——比较器技术
- Java学习笔记--集合元素的比较Comparable,Comparator
- Java-马士兵设计模式学习笔记-策略模式-模拟 Comparator接口
- 【Java 学习笔记】 TreeMap排序,Comparator的定义