当前位置: 首页 > news >正文

Java可变参数和集合工具类Collections的详细介绍

文章目录

    • 可变参数
    • 集合工具类

可变参数

可变参数:

可变参数用在形参中可以接收多个不确定的数据。

可变参数的格式:数据类型...参数名称

可变参数作用:

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

可变参数在方法内部本质上就是一个数组, 因此可以使用数组的方法

public static void main(String[] args) {
    add(); // 可以不传参数
    add(10); // 可以传一个参数
    add(10, 20, 30); // 可以传任意数量的参数
    add(new int[]{90, 60, 40}); // 可以传入一个数组
}

public static void add(int ...nums) {
    // 可以使用数组的方法
    System.out.println("元素的个数: " + nums.length);
    System.out.println("元素的内容: " + Arrays.toString(nums));
}

可变参数的注意事项:

一个形参列表中可变参数只能有一个

// 错误演示
public static void add(int ...nums, int ...nums2) {
  
}

如果还有其他参数, 可变参数必须放在形参列表的最后面

public static void main(String[] args) {
    add(10, 20, 30);
}

// 可变参数要放在最后面
public static void add(int a, int b, int ...nums) {
    System.out.println(a); // 10
    System.out.println(b); // 20
    System.out.println("元素的个数: " + nums.length); // 1
    System.out.println("元素的内容: " + Arrays.toString(nums)); // [30]
}

假如需要定义一个方法求和,该方法可以灵活的完成如下需求

计算1个数据的和。

计算2个数据的和。

计算3个数据的和。

计算1个数组的和。

甚至可以支持不接收参数进行调用。

public class ParamsDemo2 {
    public static void main(String[] args) {
      	// 不接受参数
      	add(); // 0
      	// 计算1个数据的和
        add(10); // 10
      	// 计算2个数据的和
        add(10, 20); // 30
				// 计算3个数据的和
      	add(10, 20, 30); // 60
      	// 计算1个数组的和
        add(new int[] {10, 20, 30, 40}); // 100
    }
  
  	// 计算和的方法
    public static void add(int ...nums) {
        int sum = 0;
        for (int i : nums) {
            sum += i;
        }
        System.out.println(sum);
    }
}

集合工具类

Collections集合工具类:

java.utils.Collections: 是集合工具类, Collections中的方法全部都是静态方法, 无需创建对象直接使用即可

作用:Collections并不属于集合,是用来操作集合的工具类(操作集合的辅助工具)。

Collections常用的基础API:

方法名称说明
addAll(Collection<? super T> c, T… elements)给集合对象批量添加元素
shuffle(List<?> list)打乱List集合元素的顺序

addAll方法批量添加元素

public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    // 批量添加数据
    Collections.addAll(names, "chenyq", "kaisa", "why");
    System.out.println(names); // [chenyq, kaisa, why]
}

shuffle方法, 只能打乱List集合的数据, Set集合的顺序无法打乱; 每次执行该方法都会随机打乱数组

public static void main(String[] args) {
    List<String> names = new ArrayList<>();
    // 批量添加数据
    Collections.addAll(names, "chenyq", "kaisa", "why");
    System.out.println(names); // [chenyq, kaisa, why]

    // 打乱List集合的数据
    Collections.shuffle(names);
    System.out.println(names); // [kaisa, why, chenyq]
}

Collections排序相关API:

使用范围:只能对于List集合的排序, Set集合有自己的排序规则。

方法名称说明
sort(List<T> list)将集合中元素按照默认规则排序
sort(List<T> list,Comparator<? super T> c)将集合中元素按照指定规则排序
public static void main(String[] args) {
    List<Integer> nums = new ArrayList<>();
    Collections.addAll(nums, 10, 30, 40, 20, 90, 70);
    System.out.println(nums); // [10, 30, 40, 20, 90, 70]

    // 按照默认规则排序
    Collections.sort(nums);
    System.out.println(nums); // [10, 20, 30, 40, 70, 90]
}

sort方法也可以自己指定规则排序

public static void main(String[] args) {
    List<Integer> nums = new ArrayList<>();
    Collections.addAll(nums, 10, 30, 40, 20, 90, 70);

    // 自定义比较规则排序, 例如倒序
    Collections.sort(nums, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });
    System.out.println(nums); // [90, 70, 40, 30, 20, 10]
}

相关文章:

  • 视频监控平台的web客户端看到的视频画面是黑屏时的处理方法
  • 还在 MySQL 中使用枚举?小心有坑~
  • Linux下跟踪某个进程的内核处理时延消耗情况
  • 【详细讲解CentOS常用的命令】
  • Python中的WinForms类桌面应用程序开发
  • shell流程控制语句
  • 七、ChatGPT为什么会被热炒?
  • 省市区街道/乡镇四级联动vue3
  • 桥接模式:解耦抽象与实现,实现灵活多变的扩展结构
  • 小程序画布(二维地图线)
  • Redis中的AOF重写到底是怎么一回事
  • 德国半导体公司 TDK-Micronas 通过 OpenText ETX 加速产品开发,缩短研发上市时间
  • 网站构建初级教程
  • 项目管理逻辑:老板为什么赔钱的项目也做?为什么害怕你闲着?
  • Spring Boot 框架整合 MyBatis 连接数据库,详细说明
  • MySQL主从同步
  • 微服务自动化【Docker-Compose】
  • 在Postgres中分页的五种方法,从基本到异国情调
  • 工作经历分享
  • 堆(二叉堆)-优先队列-数据结构和算法(Java)
  • awk命令的使用
  • 初学Nodejs(5):npm包管理器与包的发布
  • mysql高阶语句
  • [附源码]Python计算机毕业设计Django勤工俭学管理小程序
  • 0115 查找算法Day4
  • HTML5期末大作业:基于HTML+CSS+JavaScript实现中国风文化传媒企业官网源码
  • 计算机导论第十一周课后作业
  • [附源码]计算机毕业设计线上社区管理系统Springboot程序
  • GIT分布式版本控制系统 | 命令讲解入门
  • CentOS下将 /home 目录合并到 / 目录
  • 「Redis数据结构」RedisObject
  • 微服务框架 SpringCloud微服务架构 10 使用Docker 10.7 数据卷命令