当前位置:首页 > Java

java如何生成随机数不重复

2026-02-05 10:58:23Java

生成不重复随机数的方法

在Java中生成不重复的随机数可以通过多种方式实现,以下是几种常见的方法:

使用Collections.shuffle

通过将数字放入列表并打乱顺序来确保不重复:

List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
    numbers.add(i);
}
Collections.shuffle(numbers);
// 取前N个不重复随机数
for (int i = 0; i < 10; i++) {
    System.out.println(numbers.get(i));
}

使用Set存储已生成的随机数

利用Set自动去重的特性:

Random random = new Random();
Set<Integer> uniqueNumbers = new HashSet<>();
while (uniqueNumbers.size() < 10) {
    int num = random.nextInt(100) + 1;
    uniqueNumbers.add(num);
}
// 输出结果
for (Integer num : uniqueNumbers) {
    System.out.println(num);
}

使用Java 8的Stream API

利用Java 8的流式操作生成不重复随机数:

Random random = new Random();
List<Integer> uniqueRandoms = random.ints(1, 101)
    .distinct()
    .limit(10)
    .boxed()
    .collect(Collectors.toList());
// 输出结果
uniqueRandoms.forEach(System.out::println);

使用Fisher-Yates洗牌算法

实现自定义的洗牌算法:

int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
    array[i] = i + 1;
}
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;
}
// 取前10个元素
for (int i = 0; i < 10; i++) {
    System.out.println(array[i]);
}

使用BitSet跟踪已生成的数字

对于大范围随机数生成,可以使用BitSet提高效率:

java如何生成随机数不重复

Random random = new Random();
BitSet used = new BitSet(101);
int count = 0;
while (count < 10) {
    int num = random.nextInt(100) + 1;
    if (!used.get(num)) {
        used.set(num);
        count++;
        System.out.println(num);
    }
}

每种方法适用于不同的场景,选择时应考虑性能需求和随机数范围大小。对于小范围随机数,Collections.shuffle或Set方法简单高效;对于大范围随机数,Fisher-Yates或BitSet方法更节省内存。

标签: 随机数java
分享给朋友:

相关文章

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

java如何连接mysql数据库

java如何连接mysql数据库

连接 MySQL 数据库的步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,可以在 pom.xml 中添加以下依赖: <dependency…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…

如何精通java

如何精通java

理解Java核心概念 Java的基础知识包括数据类型、变量、运算符、控制流语句(如循环和条件判断)、数组以及面向对象编程(OOP)的核心概念(类、对象、继承、多态、封装)。熟练掌握这些内容是后续学习的…

react如何与java配合

react如何与java配合

React 与 Java 配合的常见方式 React 作为前端框架,通常与 Java 后端通过 RESTful API 或 GraphQL 进行交互。以下是几种常见的配合方式: RESTful AP…

php的随机数怎么实现

php的随机数怎么实现

使用 rand() 函数 rand() 是 PHP 中最基础的随机数生成函数,可以生成指定范围内的整数。 语法示例: $randomNumber = rand($min, $max); 例如…