Java随机编号不重复

在Java编程中,我们经常需要生成不重复的随机编号。这在很多场景下都非常有用,比如生成唯一订单号、用户ID等。本文将介绍如何在Java中实现这一功能。

原理

生成不重复的随机编号,我们通常需要借助数据结构来存储已经生成的编号,以确保新生成的编号不会与已有编号重复。常用的数据结构有HashSet、TreeSet等。

实现

以下是使用HashSet实现不重复随机编号生成的示例代码:

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

public class UniqueRandomNumberGenerator {
    private static final int MAX_NUMBER = 10000;
    private static final int MIN_NUMBER = 1;
    private final Set<Integer> generatedNumbers = new HashSet<>();
    private final Random random = new Random();

    public int generateUniqueNumber() {
        while (true) {
            int number = random.nextInt(MAX_NUMBER - MIN_NUMBER + 1) + MIN_NUMBER;
            if (generatedNumbers.add(number)) {
                return number;
            }
        }
    }

    public static void main(String[] args) {
        UniqueRandomNumberGenerator generator = new UniqueRandomNumberGenerator();
        for (int i = 0; i < 10; i++) {
            System.out.println(generator.generateUniqueNumber());
        }
    }
}

关系图

以下是生成不重复随机编号过程中涉及的类和它们之间的关系:

erDiagram
    UNG ||--o| RNG : has
    UNG {
        int generateUniqueNumber()
        Set<Integer> generatedNumbers
        Random random
    }
    RNG {
        int nextInt(int bound)
    }

流程图

以下是生成不重复随机编号的流程:

flowchart TD
    A[开始] --> B[生成随机编号]
    B --> C{编号是否已存在?}
    C -- 是 --> B
    C -- 否 --> D[将编号添加到集合]
    D --> E[返回编号]
    E --> F[结束]

结尾

通过上述代码示例和流程图,我们可以看到生成不重复随机编号的过程相对简单。使用HashSet存储已生成的编号,可以有效避免编号重复。当然,还有其他方法可以实现这一功能,比如使用TreeSet等。希望本文对你有所帮助。