当前位置:首页 > Java

java如何生成随机数不重复的

2026-02-05 11:26:51Java

生成不重复随机数的方法

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

使用Collections.shuffle方法

将数字放入列表中,打乱顺序后取出前N个元素:

List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
    numbers.add(i);
}
Collections.shuffle(numbers);
for (int i = 0; i < 10; i++) {
    System.out.println(numbers.get(i));
}

使用Set集合特性

利用Set不允许重复元素的特性:

Random random = new Random();
Set<Integer> set = new HashSet<>();
while (set.size() < 10) {
    set.add(random.nextInt(100) + 1);
}
for (Integer num : set) {
    System.out.println(num);
}

使用Fisher-Yates洗牌算法

直接实现洗牌算法:

int[] arr = new int[100];
for (int i = 0; i < arr.length; i++) {
    arr[i] = i + 1;
}
Random random = new Random();
for (int i = arr.length - 1; i > 0; i--) {
    int index = random.nextInt(i + 1);
    int temp = arr[index];
    arr[index] = arr[i];
    arr[i] = temp;
}
for (int i = 0; i < 10; i++) {
    System.out.println(arr[i]);
}

使用Stream API(Java 8+)

利用Stream的distinct和limit方法:

Random random = new Random();
random.ints(1, 101)
      .distinct()
      .limit(10)
      .forEach(System.out::println);

注意事项

  • 当需要生成的随机数范围较大而数量较少时,Set方法效率较高
  • 当需要生成接近范围上限数量的随机数时,洗牌算法更合适
  • 对于大量数据,应考虑使用更高效的数据结构如BitSet
  • 在多线程环境下应使用ThreadLocalRandom替代Random

java如何生成随机数不重复的

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

相关文章

如何查看java版本

如何查看java版本

查看 Java 版本的方法 通过命令行工具 打开终端(Windows 为命令提示符或 PowerShell,macOS/Linux 为 Terminal),输入以下命令并回车: java -ve…

java如何下载

java如何下载

下载Java的步骤 访问Oracle官方网站或OpenJDK项目页面下载Java开发工具包(JDK)。Oracle JDK适用于商业用途,OpenJDK为开源版本。 打开浏览器,进入Oracle…

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名.方法…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对…