当前位置:首页 > Java

java如何生成随机数不重复

2026-03-03 22:15:27Java

生成不重复随机数的方法

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

使用HashSet存储随机数

利用HashSet的特性自动去重,确保生成的随机数不重复。当生成的随机数已存在于HashSet中时,重新生成直到获取唯一的数值。

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class UniqueRandom {
    public static void main(String[] args) {
        Set<Integer> uniqueNumbers = new HashSet<>();
        Random random = new Random();
        int range = 100; // 随机数范围
        int count = 10;  // 需要的随机数数量

        while (uniqueNumbers.size() < count) {
            int num = random.nextInt(range);
            uniqueNumbers.add(num);
        }

        System.out.println(uniqueNumbers);
    }
}

使用Fisher-Yates洗牌算法

通过预先生成一个有序的列表,然后使用Fisher-Yates算法进行随机打乱,从而保证随机数的唯一性和随机性。

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

public class UniqueRandom {
    public static void main(String[] args) {
        Integer[] array = new Integer[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }

        List<Integer> list = Arrays.asList(array);
        Collections.shuffle(list);

        // 获取前10个不重复的随机数
        List<Integer> result = list.subList(0, 10);
        System.out.println(result);
    }
}

使用Stream API

Java 8及以上版本可以使用Stream API结合随机数生成器来生成不重复的随机数。

import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class UniqueRandom {
    public static void main(String[] args) {
        int range = 100;
        int count = 10;
        Random random = new Random();

        IntStream.generate(() -> random.nextInt(range))
                .distinct()
                .limit(count)
                .boxed()
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }
}

使用BitSet记录已生成随机数

通过BitSet记录已生成的随机数,确保每次生成的随机数未被使用过。

import java.util.BitSet;
import java.util.Random;

public class UniqueRandom {
    public static void main(String[] args) {
        int range = 100;
        int count = 10;
        BitSet used = new BitSet(range);
        Random random = new Random();
        int[] result = new int[count];

        for (int i = 0; i < count; i++) {
            int num;
            do {
                num = random.nextInt(range);
            } while (used.get(num));
            used.set(num);
            result[i] = num;
        }

        for (int num : result) {
            System.out.println(num);
        }
    }
}

方法比较

  • HashSet:简单易用,适用于小范围随机数生成,但可能因重复生成导致效率问题。
  • Fisher-Yates洗牌算法:高效且随机性强,适用于需要生成大量不重复随机数的场景。
  • Stream API:代码简洁,适合Java 8及以上版本,但性能可能不如其他方法。
  • BitSet:内存占用低,适合大范围随机数生成,但实现稍复杂。

根据具体需求选择合适的方法即可。

java如何生成随机数不重复

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

相关文章

如何查看java版本

如何查看java版本

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

java如何下载

java如何下载

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

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

java如何产生随机数

java如何产生随机数

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

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…