• 78-Java的可变参数、集合操作的工具类-Collections


    补充知识


    一、可变参数

    1、案例导学
    (1)需求:
    • 假如需要定义一个方法求和,该方法可以灵活的完成如下需求:
      • 计算1个数据的和;
      • 计算2个数据的和;
      • 计算3个数据的和;
      • 计算n个数据的和,甚至可以支持不接收参数进行调用。

    (2)解决需求
    • 可变参数

      • 可变参数用在形参中可以接收多个数据。

      • 可变参数的格式:

        数据类型...参数名称
        
        • 1
        public static void sum(int...nums){
            
        }
        
        • 1
        • 2
        • 3
    • 可变参数的作用

      • 传输参数非常灵活,方便。
      • 可以不传输参数,可以传输1个或者多个参数,也可以传输一个数组。

    在这里插入图片描述

    package com.app.d4_params;
    
    import java.util.Arrays;
    
    /**
        目标:理解可变参数的作用,并学会使用可变参数解决实际需求。
        需求:
         假如需要定义一个方法求和,该方法可以灵活的完成如下需求:
            计算1个数据的和;
            计算2个数据的和;
            计算3个数据的和;
            计算n个数据的和,甚至可以支持不接收参数进行调用。
     */
    public class ParamsDemo1 {
        public static void main(String[] args) {
            sum();                          // 1、可以不传输参数
            sum(10);                 // 2、可以传输一个参数
            sum(15, 5, 20);          // 3、可以传输多个参数
            sum(new int[]{10, 5, 15, 30});  // 4、可以传输一个数组
        }
    
        public static void sum(int...nums){
            // 注意:可变参数在方法内部其实就是一个数组。nums
            System.out.println("元素个数:" + nums.length);
            System.out.println("元素内容:" + Arrays.toString(nums));
        }
    }
    
    • 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
    元素个数:0
    元素内容:[]
    元素个数:1
    元素内容:[10]
    元素个数:3
    元素内容:[15, 5, 20]
    元素个数:4
    元素内容:[10, 5, 15, 30]
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (3)可变参数的注意事项:
    • 一个形参列表中可变参数只能有一个;
      在这里插入图片描述

    • 可变参数必须放在形参列表的最后面。

      在这里插入图片描述




    二、集合工具类:Collecitons

    1、概述及作用
    • java.utils.Collections:是集合工具类
    • 作用:Collections并不属于集合,是用来操作集合的工具类。

    2、Collections常用的API
    方法说明
    public static < T > boolean addAll(Collection< ? super T> c, T… elements)给集合对象批量添加元素
    public static void shuffle(List list)打乱List集合元素的顺序(通俗点讲:洗牌)

    3、Collections排序相关的API
    • 使用范围:只能对于List集合的排序。

    • 排序方式一:

      方法说明
      public static < T > void sort(List< T > list)将集合中元素按照默认规则排序
    • 排序方式二:

      方法说明
      public static < T > void sort(List< T > list, Comparator c)将集合中元素按照指定规则排序

    package com.app.d5_Collections;
    
    /**
        自定义类:猫类。
        让自定义的类实现Comparable接口重写里面的compareTo方法,来自定义比较规则。
     */
    public class Cat implements Comparable<Cat>{
        /**
         * 重写Comparable接口的compareTo方法,来自定义比较规则。
         * @param o 接收一个猫对象
         * @return
         */
        @Override
        public int compareTo(Cat o) {
            /*
              关于返回值的规则:
                - 如果认为第一个元素大于第二个元素,返回正整数即可。
                - 如果认为第一个元素小于第二个元素,返回负整数即可。
                - 如果认为第一个元素等于第二个元素,返回0即可。
             */
            // 自定义比较规则:按照猫的重量来排序
            // 升序
            return this.weight - o.weight;  // List集合存储相同大小的元素,会保留!因为List集合是可重复的
        }
    
        /**
            猫的属性:昵称、毛色、价格、重量
         */
        private String name;
        private String color;
        private double price;
        private int weight;
    
        public Cat(){
    
        }
    
        public Cat(String name, String color, double price, int weight) {
            this.name = name;
            this.color = color;
            this.price = price;
            this.weight = weight;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public int getWeight() {
            return weight;
        }
    
        public void setWeight(int weight) {
            this.weight = weight;
        }
    
        @Override
        public String toString() {
            return "Cat{" +
                    "name='" + name + '\'' +
                    ", color='" + color + '\'' +
                    ", price=" + price +
                    ", weight=" + weight +
                    '}';
        }
    
    
    }
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    package com.app.d5_Collections;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    /**
        目标:掌握Collections工具类的常用API
     */
    public class CollectionsDemo1 {
        public static void main(String[] args) {
            // 1、给任意集合批量添加元素
            List<String> names = new ArrayList<>();
            // 之前的添加元素,只能一个一个的加
            // names.add("楚留香");
            // names.add("胡铁花");
            // names.add("张无忌");
            // names.add("陆小凤");
    
            Collections.addAll(names, "楚留香", "胡铁花", "张无忌", "陆小凤");
            System.out.println(names);
    
            System.out.println("----------------------------------");
    
            // 2、打乱List集合顺序(每次执行都会打乱)。
            // 注意不是打乱Set集合的顺序,因为Set集合本身就是无序的
            Collections.shuffle(names);
            System.out.println(names);
    
            System.out.println("----------------------------------");
    
            // 3、将List集合中的元素按照默认规则排序。
            List<Integer> numbers = new ArrayList<>();
            Collections.addAll(numbers, 33, 12, 3, 2);
            System.out.println("排序前:" + numbers);
            Collections.sort(numbers);
            System.out.println("排序后:" + numbers);
    
            System.out.println("----------------------------------");
    
            // 4、将List集合中的元素按照指定规则排序
            List<Cat> cats = new ArrayList<>();
            Collections.addAll(cats,
                    new Cat("胖球", "花白色", 899.9, 40),
                    new Cat("咪咪", "白色", 666.5, 40),
                    new Cat("小黑", "黑色", 899.8, 25),
                    new Cat("虾皮", "黄色", 566.9, 33)
            );
    
            System.out.println("排序前:");
            for (Cat cat : cats) {
                System.out.println(cat);
            }
            System.out.println();
    
            // Collections.sort(cats);     // 可以的,因为Cat类已经重写了比较规则
            // 指定规则排序方式二:直接在Collections的sort方法设置Comparable接口对应的比较器对象(推荐)
            /*Collections.sort(cats, new Comparator() {
                @Override
                public int compare(Cat o1, Cat o2) {
                    // 自定义比较规则:按照猫的重量降序排序
                    return o2.getWeight() - o1.getWeight(); // List集合存储相同大小的元素,会保留!因为List集合是可重复的
                }
            });*/
            
            // 简化:Lambda表达式——>按照猫的重量降序排序
            Collections.sort( cats, (o1, o2) -> Double.compare(o2.getPrice(), o1.getPrice()) );
    
            System.out.println("排序后:");
            for (Cat cat : cats) {
                System.out.println(cat);
            }
        }
    }
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    [楚留香, 胡铁花, 张无忌, 陆小凤]
    ----------------------------------
    [楚留香, 陆小凤, 张无忌, 胡铁花]
    ----------------------------------
    排序前:[33, 12, 3, 2]
    排序后:[2, 3, 12, 33]
    ----------------------------------
    排序前:
    Cat{name='胖球', color='花白色', price=899.9, weight=40}
    Cat{name='咪咪', color='白色', price=666.5, weight=40}
    Cat{name='小黑', color='黑色', price=899.8, weight=25}
    Cat{name='虾皮', color='黄色', price=566.9, weight=33}
    
    排序后:
    Cat{name='胖球', color='花白色', price=899.9, weight=40}
    Cat{name='小黑', color='黑色', price=899.8, weight=25}
    Cat{name='咪咪', color='白色', price=666.5, weight=40}
    Cat{name='虾皮', color='黄色', price=566.9, weight=33}
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20



  • 相关阅读:
    [Python进阶] Pyinstaller打包模式
    SpringBoot SpringBoot 运维实用篇 2 配置高级 2.2 临时属性【开发环境】
    C++-Cmake指令:set
    产品经理常用工具汇总
    李宏毅机器学习作业10——Adversarial Attack,FGSM,IFGSM
    Mysql之多表查询下篇
    Hadoop组成、HDFS、YARN、 MapReduce、 Hadoop环境搭建
    【论文阅读】半监督时序动作检测 Semi-Supervised Action Detection
    webpack定制化 基础配置[基础、配置、初运行]
    案例|航海知识竞赛需求沟通整理
  • 原文地址:https://blog.csdn.net/yelitoudu/article/details/126689419