当前位置:首页 > Java

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

2026-03-03 22:44:29Java

Java生成不重复随机数的方法

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

使用HashSet存储随机数

利用HashSet不允许重复元素的特性,可以确保生成的随机数不重复。每次生成随机数后添加到HashSet中,如果添加失败则重新生成。

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

public class UniqueRandom {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();
        Random random = new Random();
        int count = 10; // 生成10个不重复的随机数
        int range = 100; // 随机数范围0-99

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

        System.out.println(set);
    }
}

使用Collections.shuffle方法

如果需要生成一定范围内的不重复随机数,可以先将范围内的所有数字存入列表,然后打乱顺序,最后取出前N个数字。

import java.util.ArrayList;
import java.util.Collections;

public class UniqueRandom {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        int range = 100; // 随机数范围0-99
        int count = 10; // 生成10个不重复的随机数

        for (int i = 0; i < range; i++) {
            list.add(i);
        }

        Collections.shuffle(list);

        for (int i = 0; i < count; i++) {
            System.out.println(list.get(i));
        }
    }
}

使用Streamdistinct方法

Java 8及以上版本可以使用Streamdistinct方法生成不重复的随机数。

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

public class UniqueRandom {
    public static void main(String[] args) {
        Random random = new Random();
        int count = 10; // 生成10个不重复的随机数
        int range = 100; // 随机数范围0-99

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

使用LinkedHashSet保持顺序

如果需要保持生成的随机数的顺序,可以使用LinkedHashSet

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

import java.util.LinkedHashSet;
import java.util.Random;

public class UniqueRandom {
    public static void main(String[] args) {
        LinkedHashSet<Integer> set = new LinkedHashSet<>();
        Random random = new Random();
        int count = 10; // 生成10个不重复的随机数
        int range = 100; // 随机数范围0-99

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

        System.out.println(set);
    }
}

注意事项

  1. 随机数范围:确保随机数的范围足够大,否则可能无法生成足够数量的不重复随机数。
  2. 性能问题:如果生成大量不重复随机数,HashSet方法可能会因为重复尝试而影响性能,此时Collections.shuffle方法更高效。
  3. 线程安全:在多线程环境下,应使用ThreadLocalRandom代替Random以提高性能并避免竞争条件。

以上方法可以根据具体需求选择使用。

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

相关文章

如何用java

如何用java

用Java实现基础功能 Java是一种广泛使用的编程语言,适用于开发各种应用程序。以下是几个常见功能的实现方法。 打印"Hello, World!" public class HelloWorld…

如何编译java

如何编译java

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

java如何打印数组

java如何打印数组

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

java程序如何打包

java程序如何打包

打包Java程序的方法 使用JAR打包 Java程序可以通过JAR(Java Archive)格式打包,这是一种常见的压缩格式,适用于包含多个类文件和资源的项目。以下是使用JAR打包的步骤: 确保项…

react如何生成随机数

react如何生成随机数

生成随机数的方法 在React中生成随机数可以利用JavaScript内置的Math.random()方法,结合不同需求进行封装或扩展。以下是几种常见实现方式: 基础随机数生成 使用Math.ran…

java 实现 php ord

java 实现 php ord

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