当前位置:首页 > Java

java数组如何打乱

2026-03-23 08:54:24Java

使用 Collections.shuffle 方法

将数组转换为列表后,利用 Collections.shuffle 方法打乱顺序。此方法适用于对象数组(如 Integer[]String[])。

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ShuffleArray {
    public static void main(String[] args) {
        Integer[] array = {1, 2, 3, 4, 5};
        List<Integer> list = Arrays.asList(array);
        Collections.shuffle(list);
        System.out.println(list);
    }
}

使用 Fisher-Yates 算法

对于基本类型数组(如 int[]),可以手动实现 Fisher-Yates 算法进行随机打乱。该算法通过交换元素实现高效随机化。

import java.util.Random;

public class ShuffleArray {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        shuffleArray(array);
        for (int num : array) {
            System.out.print(num + " ");
        }
    }

    public static void shuffleArray(int[] array) {
        Random random = new Random();
        for (int i = array.length - 1; i > 0; i--) {
            int index = random.nextInt(i + 1);
            int temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
    }
}

使用 Java 8 Stream API

通过 Stream 生成随机索引并重新排序数组,适用于需要函数式编程风格的场景。

java数组如何打乱

import java.util.Arrays;
import java.util.Random;

public class ShuffleArray {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        int[] shuffled = Arrays.stream(array)
                .boxed()
                .sorted((a, b) -> new Random().nextInt() % 2 == 0 ? -1 : 1)
                .mapToInt(Integer::intValue)
                .toArray();
        System.out.println(Arrays.toString(shuffled));
    }
}

注意事项

  • 性能差异Collections.shuffle 和 Fisher-Yates 算法的时间复杂度为 O(n),而 Stream API 方法效率较低(O(n log n))。
  • 随机性:确保使用高质量的随机数生成器(如 java.util.RandomThreadLocalRandom),避免伪随机问题。
  • 不可变集合:若数组通过 Arrays.asList 转换为列表,需注意返回的列表是固定大小的,不可增删元素。

标签: 数组java
分享给朋友:

相关文章

如何配置java环境变量

如何配置java环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

java中如何获取当前时间

java中如何获取当前时间

获取当前时间的几种方法 使用 java.time 包(Java 8及以上推荐) import java.time.LocalDateTime; LocalDateTime currentTime =…

java程序如何打包

java程序如何打包

打包Java程序的方法 使用JAR打包 Java程序可以通过JAR(Java Archive)格式打包,这是一种常见的压缩格式,适用于包含多个类文件和资源的项目。以下是使用JAR打包的步骤: 确保项…

如何升级java

如何升级java

检查当前Java版本 在升级之前,需确认当前安装的Java版本。在终端或命令提示符中运行以下命令: java -version 输出会显示当前Java版本(如1.8.0_301或17.0.2)。…

win7如何配置java环境变量

win7如何配置java环境变量

下载并安装Java 从Oracle官网下载适合的Java Development Kit (JDK)安装包,选择与系统位数(32位或64位)匹配的版本。运行安装程序,按照提示完成安装,默认路径通常为C…

如何学好java编程

如何学好java编程

理解基础概念 掌握Java的基础语法是学习的起点。变量、数据类型、运算符、控制结构(如循环和条件语句)是核心内容。面向对象编程(OOP)的概念(类、对象、继承、多态、封装)是Java的核心,需深入理解…