comparable和comparator

java中提供了2中比较方式。第一种是实现java.util.Comparable接口。

public class CompType implements Comparable<Object> {
    int i,j;
    public CompType(int a,int b){
        i=a;
        j=b;
    }
    public String toString(){
        return "[i="+i+",j="+j+"]";
    }
    @Override
    public int compareTo(Object o) {
        int rvi=((CompType)o).i;
        return (i<rvi?-1:(i==rvi?0:1));
    }
    private static Random random=new Random();
    public static Generator generator(){
        return new Generator(){
            public Object next(){
                return new CompType(random.nextInt(100),random.nextInt(100));
            }
        };
    }
    public static void main(String[] args) {
        CompType[] ct=new CompType[10];
        Arrays2.fill(ct, generator());
        System.out.println("before sorting ct:"+Arrays.asList(ct));
        Arrays.sort(ct);
        System.out.println("after sorting ct:"+Arrays.asList(ct));
    }
}

第二种是使用比较器java.util.Comparator.这里使用了策略设计模式。通过策略模式,将会发生变化的代码包装在类中(策略对象),将策略对象交给保持不变的代码,后者使用

此策略实现它的算法。在这里,可以为不同的比较方式生成不同的对象,将他们用在同样的排序程序中。

public class AlphabeticComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        return o1.toString().toLowerCase().compareTo(o2.toString().toLowerCase());
    }
}
public class AlphabeticSorting {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        String[] sa=new String[10];
        Arrays2.fill(sa, new Arrays2.RandomStringGenerator(5));
        System.out.println("before sorting sa:"+Arrays.asList(sa));
        Arrays.sort(sa,new AlphabeticComparator());
        System.out.println("after sorting sa:"+Arrays.asList(sa));
    }
}

public class Reverse {
public static void main(String[] args) {
String[] a={"a","b","c"};
System.out.println("before sorting a:"+Arrays.asList(a));
Arrays.sort(a,Collections.reverseOrder());
System.out.println("after reverse sorting a:"+Arrays.asList(a));

}
}

 
posted @ 2012-06-11 22:44  eyotata  阅读(308)  评论(0编辑  收藏  举报