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

发布于:2025-05-19 ⋅ 阅读:(21) ⋅ 点赞:(0)

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()的区别)。

网站公告

今日签到

点亮在社区的每一天
去签到