• 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中的元素。

  • 相关阅读:
    推荐:Markdown编辑软件 --- 小书匠
    GoldenDict词典配置
    ivew admin
    FineUI学习网址
    博客主题说明网址
    Xshell,Xftp免费版下载方法
    linux 常用命令及操作
    Oracle数据库随机取某条记录的一个字段值
    service和ingress
    centos7离线安装docker (二进制)
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9028107.html
Copyright © 2020-2023  润新知