• 集合框架的认识(三)


    1集合的排序

    java.util.Collections类
    Collections是集合的工具类,里面定义了很多静态方法用于操作集合
    Collections.sort(List list)方法
    可以对List集合进行自然排序(从小到大)

    public class SortListDemo1 {
        public static void main(String[] args) {
            List<Integer> list=new ArrayList<>();
            Random random=new Random();
            for (int i=0;i<10;i++){
                list.add(random.nextInt(100));
            }
            System.out.println(list);
            Collections.sort(list);
            System.out.println(list);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.排序自定义元素

    /*
    编译不通过的原因:
    Collections.sort(List list)该方法要求集合中的元素类型必须实现接口:Comparable
    该接口中有一个抽象方法compareTo,这个方法用来定义元素之间的比较大小的规则,
    所以只有实现了该接口的元素才能利用这个方法比较出大小而实现排序操作
    */
    public class SortListDemo2 {
        public static void main(String[] args) {
            List<Point> list=new ArrayList<>();
            list.add(new Point(1,2));
            list.add(new Point(97,88));
            list.add(new Point(7,6));
            list.add(new Point(9,9));
            list.add(new Point(5,4));
            list.add(new Point(2,3));
            System.out.println(list);
    //        Collections.sort(list);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    实际开发中,我们并不会让我们定义的类(如果该类作为集合元素使用)去实现Comparable接口,
    因为这对我们的程序有侵入性
    **侵入性:**当我们调用某个API功能时,其要求我们为其修改其他额外的代码这个现象就是侵入性。
    侵入性越强的API越不利于程序的后期可维护性,应当尽量避免。

    3.重载的Collections.sort(List list,Comparator c)方法

    public class SortListDemo2 {
        public static void main(String[] args) {
            List<Point> list=new ArrayList<>();
            list.add(new Point(1,2));
            list.add(new Point(97,88));
            list.add(new Point(7,6));
            list.add(new Point(9,9));
            list.add(new Point(5,4));
            list.add(new Point(2,3));
            System.out.println(list);
    //        Collections.sort(list);
            Comparator<Point> com=new Comparator<Point>() {
                @Override
                /**
                 * 实现比较器接口后必须重写方法compare
                 * 该方法用来定义参数o1与参数o2的比较大小规则
                 * 返回值用来表示o1与o2的大小关系
                 */
                public int compare(Point o1, Point o2) {
                    int len1=o1.getX()*o1.getX()+o1.getY()*o1.getY();
                    int len2=o2.getX()*o2.getX()+o2.getY()*o2.getY();
                    return len1-len2;
                }
            };
            Collections.sort(list,com);//回调模式
            System.out.println(list);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4.最终没有侵入性的写法

     Collections.sort(list,(o1,o2)->
                    o1.getX()*o1.getX()+o1.getY()*o1.getY()-
                    o2.getX()*o2.getX()-o2.getY()*o2.getY()
                    );
    
    • 1
    • 2
    • 3
    • 4

    5.排序字符串

    java中提供的类,如:String,包装类都实现了Comparable接口,但是有时候这些
    比较规则不能满足我们的排序需求时,同样可以临时提供一种比较规则来进行排序

    public class SortListDemo3 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<>();
            list.add("苍老师");
            list.add("传奇");
            list.add("小泽老师");
            list.add("科比布莱恩特");
            Collections.sort(list,(o1, o2) -> o1.length()-o2.length());
            System.out.println(list);
            list.add("鲲");
            list.sort((o1, o2) -> o1.length()-o2.length());
            System.out.println(list);
            list.add("克晶老师");
            Collections.sort(list, Comparator.comparingInt(String::length));
            System.out.println(list);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

  • 相关阅读:
    大型电商网站的异步多级缓存及nginx数据本地化动态渲染架构
    代码拿走即用!Python推送内容到公众号实现自动化
    k3s 离线部署指南
    logging日志及其使用代码
    前端笔试题总结,带答案和解析(三)
    点云从入门到精通技术详解100篇-基于三维点云的并联机器人 抓取
    rviz上不显示机器人模型(模型只有白色)
    Spring-IOC
    一元多项式的乘法与加法运算
    《Secure Analytics-Federated Learning and Secure Aggregation》论文阅读
  • 原文地址:https://blog.csdn.net/longgetaotao_06/article/details/126253780