comparable和Comparator的辨别[Java编程]
本文“comparable和Comparator的辨别[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Comparable & Comparator 都是用来实现调集合的排序的,只是 Comparable 是在调集内部定义的办法实现的排序,Comparator 是在调集外部实现的排序,所以,如想实现排序,就需求在调集外定义 Comparator 接口的办法或在调集内实现 Comparable 接口的办法.
具体请看 <Thinking in java>
Comparable 是一个对象本身就已经支持自对比所需求实现的接口(如 String、Integer 自己便可以完成对比大小操作)
而 Comparator 是一个专用的对比器,当这个对象不支持自对比大概自对比函数不能满意你的要求时,你可以写一个对比器来完成两个对象之间大小的对比.
可以说一个是自已完成对比,一个是外部程序实现对比的差别罢了.
用 Comparator 是战略情势(strategy design pattern),就是不改变对象自身,而用一个战略对象(strategy object)来改变它的行为.
比方:你想对整数采取绝对值大小来排序,Integer 是不符合要求的,你不需求去改正 Integer 类(实际上你也不能这么做)去改变它的排序行为,只要利用一个实现了 Comparator 接口的对象来实现掌握它的排序就行了.
java 代码:
// AbsComparator.java
import java.util.*;
public class AbsComparator implements Comparator {
public int compare(Object o1, Object o2) {
int v1 = Math.abs(((Integer)o1).intValue());
int v2 = Math.abs(((Integer)o2).intValue());
return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);
}
}
可以用下面这个类测试 AbsComparator:
// Test.java
import java.util.*;
public class Test {
public static void main(String[] args) {
//产生一个20个随机整数的数组(有正有负)
Random rnd = new Random();
Integer[] integers = new Integer[20];
for(int i = 0; i < integers.length; i++)
integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1));
system.out.println("用Integer内置办法排序:");
Arrays.sort(integers);
system.out.println(Arrays.asList(integers));
system.out.println("用AbsComparator排序:");
Arrays.sort(integers, new AbsComparator());
system.out.println(Arrays.asList(integers));
}
}
以上是“comparable和Comparator的辨别[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |