zoukankan      html  css  js  c++  java
  • 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中的元素。

  • 相关阅读:
    解析SQL Server之任务调度
    Sqlserver (转载)事物与锁
    浅谈SQL Server数据内部表现形式
    浅谈SQL Server事务与锁(上篇)
    如何查看某个查询用了多少TempDB空间
    Select count(*)和Count(1)的区别和执行方式
    zookeeper 源码(二) session 和 处理事务请求
    zookeeper 源码(一) 选举和同步数据
    分布式一致性协议 --- Paxos
    分布式事务 --- 2PC 和 3PC
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9028107.html
Copyright © 2011-2022 走看看