当前位置: 首页 > 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()的区别)。
http://www.xdnf.cn/news/513397.html

相关文章:

  • [Java实战]Spring Boot整合Elasticsearch(二十六)
  • ARM A64 STR指令
  • LWIP的Socket接口
  • 扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松
  • C++多态与虚函数详解——从入门到精通
  • 【计算机网络】第一章:计算机网络体系结构
  • 数青蛙 --- 模拟
  • Go语言中函数 vs 方法
  • JVM如何处理多线程内存抢占问题
  • 【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
  • 【Linux】第十九章 管理SELinux安全性
  • 数字格式化库 accounting.js的使用说明
  • “Cloud Native English“云原生时代下的微服务架构设计:从理论到实战全解析
  • 【数据结构】2-3-2 单链表的插入删除
  • 结构型模式:代理模式
  • 改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型
  • 牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
  • 【C++】尾置返回类型(Trailing Return Type)总结
  • 多模态大语言模型arxiv论文略读(八十)
  • vscode优化使用体验篇(快捷键)
  • React 19版本refs也支持清理函数了。
  • 【C++】set、map 容器的使用
  • Java 中 == 与 equals() 详解
  • 索引与数据结构、并行算法
  • LlamaIndex中应用自定义提示词提升回答质量
  • go语言协程调度器 GPM 模型
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的Dify 快速构建聊天助手
  • 目标检测新突破:用MSBlock打造更强YOLOv8
  • 如何使用WordPress创建美食博客
  • 跨平台多用户环境下PDF表单“序列号生成的服务器端方案“