在Java中获取不重复的随机数,通常需要使用一些特定的策略来确保每个随机数只被生成一次,以下是一些实现这一目标的方法和示例代码。

使用HashSet存储已生成的随机数
这种方法利用了HashSet的特性,即不允许重复的元素,以下是实现步骤和代码示例:
- 创建一个HashSet来存储已生成的随机数。
- 生成随机数,并将其添加到HashSet中。
- 如果HashSet的大小没有增加,说明这个随机数已经存在,需要重新生成。
- 重复步骤2和3,直到HashSet的大小达到所需随机数的数量。
import java.util.HashSet;
import java.util.Random;
public class UniqueRandomNumbers {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
Random random = new Random();
int targetSize = 10; // 目标随机数数量
while (numbers.size() < targetSize) {
int randomNumber = random.nextInt(100); // 生成099之间的随机数
numbers.add(randomNumber);
}
System.out.println("生成的随机数(不重复): " + numbers);
}
}
使用递归和随机数生成器
这种方法通过递归生成随机数,并在每次递归时检查随机数是否已存在,以下是实现步骤和代码示例:
- 定义一个递归函数,用于生成随机数。
- 在递归函数中,生成随机数并检查是否已存在。
- 如果随机数已存在,递归调用函数以生成新的随机数。
- 如果随机数不存在,将其添加到结果列表中。
- 重复步骤24,直到达到所需随机数的数量。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class UniqueRandomNumbers {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
Random random = new Random();
int targetSize = 10; // 目标随机数数量
generateUniqueNumbers(random, numbers, targetSize);
System.out.println("生成的随机数(不重复): " + numbers);
}
private static void generateUniqueNumbers(Random random, List<Integer> numbers, int targetSize) {
if (numbers.size() >= targetSize) {
return;
}
int randomNumber = random.nextInt(100); // 生成099之间的随机数
if (!numbers.contains(randomNumber)) {
numbers.add(randomNumber);
generateUniqueNumbers(random, numbers, targetSize);
} else {
generateUniqueNumbers(random, numbers, targetSize);
}
}
}
使用Java 8的Stream API
Java 8引入了Stream API,可以方便地生成不重复的随机数,以下是实现步骤和代码示例:

- 使用
IntStream.range(0, n)生成一个从0到n1的整数流。 - 使用
boxed()方法将IntStream转换为Stream - 使用
distinct()方法确保随机数不重复。 - 使用
limit()方法限制生成的随机数数量。 - 使用
collect(Collectors.toList())收集结果到一个列表中。
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class UniqueRandomNumbers {
public static void main(String[] args) {
int targetSize = 10; // 目标随机数数量
List<Integer> numbers = IntStream.range(0, targetSize)
.boxed()
.collect(Collectors.collectingAndThen(
Stream.generate(() > (int) (Math.random() * 100)),
Stream::distinct
))
.collect(Collectors.toList());
System.out.println("生成的随机数(不重复): " + numbers);
}
}
FAQs
Q1:如何生成一个指定范围内的不重复随机数?
A1: 您可以使用Random类和HashSet来生成指定范围内的不重复随机数,创建一个HashSet来存储已生成的随机数,然后生成随机数并检查它是否已存在于HashSet中,如果不存在,则将其添加到HashSet中。
Q2:如何确保生成的随机数序列是均匀分布的?

A2: 为了确保随机数序列的均匀分布,您可以使用Random类的实例来生成随机数。Random类使用伪随机数生成器,通常可以提供足够好的随机性,如果您需要更高质量的随机数,可以考虑使用SecureRandom类,确保您在生成随机数时使用相同的种子值,以便在每次运行程序时获得相同的随机数序列。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/179964.html