当前位置:首页 > 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中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

如何自学java

如何自学java

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

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…