(78)Collection类:reverseOrder

一、public static Comparator reverseOrder()
返回一个比较器,它强行逆转实现了Comparable接口的对象collection的自然顺序。此方法允许使用单个语句,以逆自然顺序对实现了Comparable接口的对象collection(或者数组)进行排序(或者维护)

TreeSet<String> ts=new TreeSet<String>();
        ts.add("abcde");
        ts.add("aaa");
        ts.add("kkk");
        ts.add("ccc");
        Iterator<String> it=ts.iterator();
        while(it.hasNext()) {
            sop(it.next());
        }   

以上代码打印结果为aaa、abcde、ccc、kkk
分析这个结果:TreeSet集合的元素为String类型,已经实现了Comparable接口
它实现的compareTo方法就是自然顺序排序,所以就是如上的结果。
现在的需求变了,需要得到逆序输出的结果,若再写个比较器比较麻烦,所以集合框架工具类Collection类中提供了逆序输出集合的方法。它能够逆自然顺序对实现了Comparable接口的对象collection(或者数组)进行排序(或者维护),其返回还是个比较器,应该在定义声明处写TreeSet ts=new TreeSet(Collections.reverseOrder());

二、public static Comparator reverseOrder(Comparator cmp)
上面的代码还可以看。String类实现Comparable接口,是按照自然顺序排序的,若要对此排序逆转,则用一方法。假设在是之前也有按照字符串长度从小到大的排序,不能改变之前自然顺序,所以定义了比较器,即可实现这个功能。但是现在又有新的需求,要求字符串从大到小排序,不能改变比较器,就有了二。
作用:强行逆转指定比较器的顺序。
TreeSet ts=new TreeSet(Collections.reverseOrder(new MyComp()));

public class MyComp implements Comparator<String>{
    public int compare(String o1,String o2 ) {
        //主关键字为长度,次关键字为自然顺序
        int num=  o1.length()-o2.length();
        if(num==0) {
            return o1.compareTo(o2);

        }

        return num;

    }


}
posted @ 2017-07-19 18:35  测试开发分享站  阅读(218)  评论(0编辑  收藏  举报