java生成随机数的四种方法不重复
时间: 2024-10-29 21:10:32 浏览: 25
在 Java 中,有几种常见的方法可以生成不重复的随机整数:
1. **`java.util.Random.nextInt(int bound)`**:这个方法返回一个0(包括)到指定边界(不包括)之间的随机整数。如果你想要生成从0开始到某个特定范围内的不重复随机数,你可以先生成指定范围内的所有数,然后通过数组排序去重。
```java
Random random = new Random();
int[] numbers = new int[bound];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = random.nextInt(bound);
}
Arrays.sort(numbers);
numbers = Arrays.copyOfRange(numbers, 0, numbers.length);
```
2. **`Math.random()` + `nextInt()` 的组合**:这种方法会生成0.0(含)到1.0(不含)之间的小数,然后乘以你想要的整数范围再向下取整。为了保证不重复,你需要维护一个列表来存储已生成的数,直到列表满了。
```java
List<Integer> uniqueNumbers = new ArrayList<>();
while (uniqueNumbers.size() < desiredCount) {
double randomValue = Math.random() * (max - min) + min;
int randomNumber = (int) Math.floor(randomValue);
if (!uniqueNumbers.contains(randomNumber)) {
uniqueNumbers.add(randomNumber);
}
}
```
3. **`Collections.shuffle()`**:如果需要在已有的集合(如 List)上生成随机不重复的排列,可以先创建一个包含指定范围内所有数的列表,然后使用 Collections.shuffle 来打乱顺序。
```java
List<Integer> allNumbers = IntStream.rangeClosed(min, max).boxed().collect(Collectors.toList());
Collections.shuffle(allNumbers);
```
4. **`SecureRandom` 类**:如果你需要更安全的随机数生成,可以使用 SecureRandom 类代替 Random。它的方法工作原理类似,但通常用于加密等安全场景。
请注意,以上所有方法都不能保证绝对无重复,因为它们依赖于内部的随机源,特别是当范围较大时,碰撞的可能性依然存在。不过,对于大部分常规应用,上述方法已经足够了。
阅读全文