当前位置:首页 > 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提高效率:

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实现基础功能 Java是一种广泛使用的编程语言,适用于开发各种应用程序。以下是几个常见功能的实现方法。 打印"Hello, World!" public class HelloWorld…

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io…