当前位置:首页 > Java

java如何生成随机数不重复

2026-03-03 22:15:27Java

生成不重复随机数的方法

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

使用HashSet存储随机数

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

java如何生成随机数不重复

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算法进行随机打乱,从而保证随机数的唯一性和随机性。

java如何生成随机数不重复

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提供了多种读取文件的方式,适用于不同场景和需求。以下是几种常见的方法: 使用FileInputStream和BufferedInputStream读取二进制文件…

java如何输出数组

java如何输出数组

输出数组的方法 在Java中,输出数组内容有多种方式,具体取决于数组类型和输出格式需求。以下是几种常见的方法: 使用Arrays.toString()方法 适用于一维数组,直接调用Arrays.to…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…

如何精通java

如何精通java

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

vue实现java登录注册

vue实现java登录注册

实现 Vue 与 Java 后端的登录注册功能 前端 Vue 部分 安装必要的依赖(如 axios 用于 HTTP 请求): npm install axios 创建登录表单组件(Login.vue…

php的随机数怎么实现

php的随机数怎么实现

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