java Collections.sort()

sort()是Collections中的静态方法,用于对List容器中的元素排序。

如容器list中存储的是Integer对象

        List<Integer> list =Arrays.asList(3, 2, 7, 5, 9, 6);
        System.out.println(Arrays.toString(list.toArray()));

输出结果为:[3, 2, 7, 5, 9, 6]

 

使用Collections.sort()对list排序

        Collections.sort(list);
        System.out.println(Arrays.toString(list.toArray()));

输出结果为:[2, 3, 5, 6, 7, 9]

 

使用Collections.sort()是有约束条件的,List中存储的对象必须实现了Comparable接口,如Integer,Double等。

如下定义一个Interval(区间)对象:

class Interval {
    int start;
    int end;
    Interval(int start, int end) {
        this.start = start;
        this.end = end;
    }

容器list中存储的为Interval对象,使用Collections.sort()方法则报错。

        List<Interval> list = new ArrayList<>();
        list.add(new Interval(2, 4));
        list.add(new Interval(0, 4));
        list.add(new Interval(3, 5));
        list.add(new Interval(1, 2));
        list.add(new Interval(7, 9));
        list.add(new Interval(6, 8));

        Collections.sort(list);   // error

 

一种方法是使Interval类实现Comparable接口,按Interval对象中start大小排序。

class Interval implements Comparable<Interval>{
    int start;
    int end;
    Interval(int start, int end) {
        this.start = start;
        this.end = end;
    }
    @Override
    public int compareTo(Interval temp) {
        return this.start - temp.start;
    }
}

再使用Collections.sort()方法对list中的元素排序,便不会报错。

        List<Interval> list = new ArrayList<>();
        list.add(new Interval(2, 4));
        list.add(new Interval(0, 4));
        list.add(new Interval(3, 5));
        list.add(new Interval(1, 2));
        list.add(new Interval(7, 9));
        list.add(new Interval(6, 8));
        for (Interval obj:list)
            System.out.print(obj.start + " ");
        System.out.println();

        Collections.sort(list); 

        for (Interval obj:list)
            System.out.print(obj.start + " ");

输出结果为:

2 0 3 1 7 6
0 1 2 3 6 7

 

另一种方法是使用Collections.sort(List<T> list, Comparator<? super T> c),使用一个Comparator对象,完成list中元素的排序。

如:

class MyComparator implements Comparator<Interval> {
    public int compare(Interval o1, Interval o2) {
        return o1.start - o2.start;
    }
}
        Collections.sort(list, new MyComparator());


        for (Interval obj:list)
            System.out.print(obj.start + " ");

输出结果为:0 1 2 3 6 7

 

也可以使用匿名内部类

        Collections.sort(list, new Comparator<Interval>(){

            @Override
            public int compare(Interval o1, Interval o2) {
                return o1.start - o2.start;
            }
        });

也可以使用Lambda表达式:

        Collections.sort(list, (a,b)->(a.start-b.start));

 

 

总结:

Collections.sort()用于对List中存储的对象进行排序,该方法有两种使用方式。

Collections.sort(List<T> list)   list中的元素必须实现了Comparable接口。

Collections.sort(List<T>list, Comparator<? super T>),使用Comparator对象比较list中的元素。

posted on 2018-05-12 11:16  Deltadeblog  阅读(163)  评论(0编辑  收藏  举报

导航