Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java random生成不重复的随机数


在 Java 中生成不重复的随机数有多种方式。下面我将介绍三种常见的实现方式,并附上相应的示例代码以及可能用到的第三方库的 Maven 和 Gradle 依赖坐标。

使用集合

这种方式是将所有可能的随机数放入一个集合中,然后每次生成一个随机数后从集合中移除,确保不会重复。

步骤流程:

  1. 创建一个集合,用于存储可能的随机数。
  2. 生成一个随机数,并从集合中移除。
  3. 重复步骤 2,直到需要的数量的随机数被生成。

示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class UniqueRandomGenerator {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        int min = 1;
        int max = 100;
        int count = 10;

        for (int i = min; i <= max; i++) {
            numbers.add(i);
        }

        Random random = new Random();
        for (int i = 0; i < count; i++) {
            int index = random.nextInt(numbers.size());
            int randomNum = numbers.remove(index);
            System.out.println(randomNum);
        }
    }
}

使用 Fisher-Yates 洗牌算法

这种方式使用 Fisher-Yates 洗牌算法将所有可能的随机数进行随机排列,然后依次取出前 N 个数。

步骤流程:

  1. 创建一个数组,包含所有可能的随机数。
  2. 使用 Fisher-Yates 算法对数组进行洗牌。
  3. 依次取出前 N 个洗牌后的数作为不重复随机数。

示例代码:

import java.util.Arrays;
import java.util.Random;

public class UniqueRandomGenerator {
    public static void main(String[] args) {
        int min = 1;
        int max = 100;
        int count = 10;

        int[] numbers = new int[max - min + 1];
        for (int i = min; i <= max; i++) {
            numbers[i - min] = i;
        }

        Random random = new Random();
        for (int i = numbers.length - 1; i > 0 && count > 0; i--) {
            int index = random.nextInt(i + 1);
            int temp = numbers[index];
            numbers[index] = numbers[i];
            numbers[i] = temp;
            System.out.println(temp);
            count--;
        }
    }
}

使用 Apache Commons Lang 库

Apache Commons Lang 库中的 RandomUtils 类提供了生成不重复随机数的方法。这种方式利用了洗牌算法。

步骤流程:

  1. 引入 Apache Commons Lang 库的依赖。
  2. 使用 RandomUtils 类的 nextInt 方法生成不重复随机数。

示例代码:

import org.apache.commons.lang3.RandomUtils;

public class UniqueRandomGenerator {
    public static void main(String[] args) {
        int min = 1;
        int max = 100;
        int count = 10;

        for (int i = 0; i < count; i++) {
            int randomNum = RandomUtils.nextInt(min, max + 1);
            System.out.println(randomNum);
        }
    }
}

Maven 依赖坐标:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version> <!-- Use the latest version -->
</dependency>

Gradle 依赖坐标:

implementation 'org.apache.commons:commons-lang3:3.12.0' // Use the latest version

以上是三种在 Java 中生成不重复随机数的方式,每种方式都有其特点和适用场景。选择合适的方法取决于你的需求和偏好。

在Java中生成随机数有多种方式,我将为你介绍一些常见的实现方式,包括使用Java标准库以及一些第三方库。示例代码:###使用JavaThr ...
在Java中生成随机数有多种方式,我将为你列出几种常见的实现方式,包括使用Java标准库和一些第三方库。示例代码:###使用ApacheCo ...
示例代码:Maven依赖:以上是几种常见的在Java中生成随机数的方式,每种方式都有适用的场景。 ...
在Java中生成指定范围的随机数有多种方式,我将为您介绍三种常用的方法,并附上相应的代码示例和可能需要的第三方库的Maven和Gradle依 ...
在Java中使用EasyExcel来保证数据不重复,你可以采用以下几种方式实现。###方式一:使用Set数据结构使用Java中的`Set`数 ...