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

Java可变参数与Collections工具类详解

Java可变参数与Collections工具类详解

一、可变参数(Variable Arguments)

1.1 基本概念

可变参数是Java 5引入的特性,允许在方法中定义数量可变的形参。其核心特点是:形参个数可以动态变化(0个、1个、多个),底层由数组实现,但开发者无需手动创建数组。

语法格式:
数据类型... 参数名 
// 示例:
public static int sum(int... nums) { ... }

1.2 使用示例

public class ArgsDemo {public static void main(String[] args) {int sum = getSum(1, 2, 3, 4, 5); // 传递任意个参数System.out.println("Sum: " + sum); // 输出15}public static int getSum(int... nums) {int sum = 0;for (int num : nums) {sum += num;}return sum;}
}

1.3 注意事项

  1. 只能有一个可变参数:方法形参中最多只能包含一个可变参数。
  2. 必须放在最后:如果方法有其他形参,可变参数需放在末尾。
  3. 与数组的区别:调用时无需显式创建数组,Java自动封装参数为数组。

错误示例

// 编译错误:可变参数不在末尾
public static void errorMethod(int... nums, String str) { ... }// 编译错误:多个可变参数
public static void errorMethod(int... nums1, String... strs) { ... }

二、Collections工具类

2.1 核心作用

java.util.Collections是集合操作的工具类,提供了一系列静态方法用于集合的增删改查、排序、查找等操作。

2.2 常用API详解

方法名称说明示例
addAll(Collection<T> c, T... elements)批量添加元素Collections.addAll(list, "A", "B", "C");
shuffle(List<?> list)随机打乱集合顺序Collections.shuffle(list);
sort(List<T> list)自然顺序排序(升序)Collections.sort(numbers);
sort(List<T> list, Comparator<T> c)自定义规则排序Collections.sort(students, Comparator.comparing(Student::getAge));
binarySearch(List<T> list, T key)二分查找元素索引int index = Collections.binarySearch(list, 5);
copy(List<T> dest, List<T> src)拷贝集合元素Collections.copy(destList, srcList);
reverse(List<?> list)反转集合顺序Collections.reverse(list);
max(Collection<T> coll)获取最大值(自然排序)int max = Collections.max(numbers);

2.3 代码演示

import java.util.ArrayList;
import java.util.Collections;public class CollectionsDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();// 批量添加元素Collections.addAll(list, "A", "B", "C", "D");System.out.println("原始列表: " + list); // [A, B, C, D]// 打乱顺序Collections.shuffle(list);System.out.println("打乱后: " + list); // 如 [B, D, A, C]// 排序Collections.sort(list);System.out.println("排序后: " + list); // [A, B, C, D]}
}

2.4 补充知识点

  1. 集合填充Collections.fill(list, "X") 将集合所有元素替换为指定值。
  2. 交换元素Collections.swap(list, 0, 1) 交换索引0和1的元素。
  3. 线程安全集合:通过Collections.synchronizedList(list)将普通集合转为线程安全版本。

三、综合应用场景

场景1:斗地主发牌(集合嵌套)

// 使用可变参数初始化牌组
public static List<String> initPoker(String... colors) {List<String> poker = new ArrayList<>();for (String color : colors) {for (int i = 1; i <= 13; i++) {poker.add(color + i);}}return poker;
}// 调用
List<String> poker = initPoker("♠", "♥", "♣", "♦");
Collections.shuffle(poker); // 洗牌

场景2:动态参数统计

public static void printNames(String... names) {if (names.length == 0) {System.out.println("无名氏");} else {Arrays.stream(names).forEach(System.out::println);}
}

四、总结对比

特性可变参数Collections工具类
核心功能动态传递多个参数提供集合操作的静态工具方法
底层实现自动封装为数组基于集合接口实现功能扩展
典型应用简化多参数方法的调用排序、查找、线程安全转换等

学习建议

  1. 灵活使用可变参数优化多参方法。
  2. 掌握Collections工具类的常用API,提升集合操作效率。
  3. 结合源码理解底层实现(如Arrays.asList()Collections.addAll()的区别)。

相关文章:

  • 系统架构设计师考前冲刺笔记-第1章-系统工程与信息系统基础
  • 深入解析Java事件监听机制与应用
  • GOP模式调节画面质量讲解
  • 【ROS2】 核心概念6——通信接口语法(Interfaces)
  • 【QGIS二次开发】地图编辑-07
  • LWIP的NETCONN接口
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Data input/output
  • 【常用算法:查找篇】9.AVL树深度解析:动态平衡二叉树的原理、实现与应用
  • USB传输速率 和 RS-232/RS-485串口协议速率 的倍数关系
  • 备忘录模式
  • 类的加载过程详解
  • LINQ:统一查询语法的强大工具
  • 服务端HttpServletRequest、HttpServletResponse、HttpSession
  • 前端动画库 Anime.js 的V4 版本,兼容 Vue、React
  • 初始C++:类和对象(中)
  • 游戏引擎学习第293天:移动Familiars
  • 线程池核心线程永续机制:从源码到实战的深度解析
  • 继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元
  • 学习黑客Active Directory 入门指南(五)
  • 32LED心形灯程序源代码
  • “当代阿炳”甘柏林逝世,创办了国内第一所残疾人高等学府
  • 香港今年新股集资额已超600亿港元,暂居全球首位
  • 知名中医讲师邵学军逝世,终年51岁
  • 2025年上海科技节开幕,人形机器人首次登上科学红毯
  • 杨建全已任天津市委副秘书长、市委市政府信访办主任
  • 郑钦文憾负高芙,止步WTA1000罗马站四强