当前位置:首页 > Java

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

2026-02-05 11:26:51Java

生成不重复随机数的方法

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

使用Collections.shuffle方法

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

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

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不允许重复元素的特性:

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

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中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

如何安装java运行环境

如何安装java运行环境

下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本进行下载。Windows用户通常选择.exe安装包,macOS用户选择.dmg,Linu…

java如何创建测试类

java如何创建测试类

创建测试类的基本步骤 在Java中创建测试类通常使用JUnit框架,以下是具体方法: 安装JUnit依赖 对于Maven项目,在pom.xml中添加依赖: <dependency>…

java 实现 php ord

java 实现 php ord

Java 实现 PHP 的 ord 函数 PHP 的 ord 函数用于获取字符串中第一个字符的 ASCII 值。在 Java 中,可以通过类型转换或直接使用字符的 Unicode 值实现类似功能。…