集合框架工具Collections排序以及自定义比较器排序

package demo.assemble;

import java.util.*;

class 集合框架工具_Collections排序_自定义比较器排序 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("zfe");
        list.add("af");
        list.add("af");
        list.add("taxa");
        list.add("uzsa");
        System.out.println("初始化:" + list);

        Collections.sort(list);//自然排序

        //Collections.sort(list, new CompareToByStringLength());//对List集合元素进行排序     比较器,根据字符串长度排序

        //比较器逆转 长度反向排序(也可以在构造Tree时,传入 new CompareToByStringLength() 实现反转 )
        // Collections.sort(list, Collections.reverseOrder(new CompareToByStringLength()));

        //mySort(list);//自定义方法的对List集合元素进行自然排序

        //mySort2(list, new CompareToByStringLength());//自定义方法的对List集合元素进行长度排序

        System.out.println("已排序:" + list);
        Collections.reverse(list);//反转顺序
        System.out.println("已反转:" + list);

        System.out.println("二分法查找指定元素下标(已排序):" + Collections.binarySearch(list, "af"));
        //按什么排序,就加上对应比较器(上面的是默认自然顺序排序)
        System.out.println("二分法查找指定元素下标(已排序):" + Collections.binarySearch(list, "af", new CompareToByStringLength()));

        System.out.println("最大值:" + Collections.max(list));
        System.out.println("最大长度:" + Collections.max(list, new CompareToByStringLength()));
        System.out.println("最小值:" + Collections.min(list));

        Collections.replaceAll(list, "af", "aaaaaf");//将所有的af 替换为 aaaaaf
//        list.set(list.indexOf("af"), "aaaaaf");//其实是,通过多次此方法实现replaceAll()方法
        System.out.println("修改元素:" + list);

        Collections.shuffle(list);
        System.out.println("打乱序列:" + list);

        Collections.fill(list, "cc");
        System.out.println("将所有元素使用指定同一元素填充:" + list);

        list = Collections.synchronizedList(list);//返回一个同步的Collection,List,Map,Set

        //将集合元素用枚举返回,并遍历
        for (Enumeration<String> en = Collections.enumeration(list); en.hasMoreElements(); ) {
            System.out.println(en.nextElement());
        }
    }

    //自定义的对List集合元素进行排序     前提:该对象的类已实现Comparable接口
    private static <T extends Comparable<? super T>> void mySort(List<T> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = i; j < list.size() - i - 1; j++) {
                if (list.get(j).compareTo(list.get(j + 1)) > 0) {//如果前一个元素大于后一个(自然比较)
                    Collections.swap(list, j, j + 1);//交换list中,j和j+1位置元素
                }
            }
        }
    }

    //利用比较器排序
    private static <T> void mySort2(List<T> list, Comparator<? super T> comp) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = i; j < list.size() - i - 1; j++) {
                if (comp.compare(list.get(j), list.get(j + 1)) > 0) {//如果前一个元素大于后一个(比较方法是看传入比较器是已上门方法进行比较的)
                    Collections.swap(list, j, j + 1);//交换list中,j和j+1位置元素
                }
            }
        }
    }

    //比较器   根据字符串长度排序
    private static class CompareToByStringLength implements Comparator<String> {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length() == 0 ? o1.compareTo(o2) : o1.length() - o2.length();
        }
    }
}
//比较器逆转; 只要有传入比较器的位置,就可以使用比较器逆转
上一篇:Python中collections模块的使用


下一篇:Map与Collections