在Java编程中,生成随机数是一个常见的需求,但有时候我们希望生成的随机数不重复,以避免数据的不一致性,以下是一些方法来防止Java中随机数的重复生成。

使用HashSet集合
HashSet是一个不允许重复元素的集合,我们可以利用这个特性来存储已经生成的随机数,从而避免重复。
实现步骤:
- 创建一个HashSet实例。
- 在生成随机数后,检查该数是否已存在于HashSet中。
- 如果不存在,则将其添加到HashSet中;如果存在,则重新生成。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class UniqueRandomNumbers {
public static void main(String[] args) {
Set<Integer> numbers = new HashSet<>();
Random random = new Random();
int count = 10; // 假设我们需要生成10个不重复的随机数
while (numbers.size() < count) {
int randomNumber = random.nextInt(100); // 生成0-99之间的随机数
numbers.add(randomNumber);
}
System.out.println("Unique random numbers: " + numbers);
}
}
使用TreeSet集合
TreeSet是一个基于红黑树的NavigableSet实现,它能够按照自然顺序或者构造器中指定的Comparator来排序元素,使用TreeSet可以确保随机数的有序性,同时避免重复。

实现步骤:
- 创建一个TreeSet实例。
- 在生成随机数后,检查该数是否已存在于TreeSet中。
- 如果不存在,则将其添加到TreeSet中;如果存在,则重新生成。
import java.util.Random;
import java.util.TreeSet;
public class UniqueRandomNumbers {
public static void main(String[] args) {
TreeSet<Integer> numbers = new TreeSet<>();
Random random = new Random();
int count = 10; // 假设我们需要生成10个不重复的随机数
while (numbers.size() < count) {
int randomNumber = random.nextInt(100); // 生成0-99之间的随机数
numbers.add(randomNumber);
}
System.out.println("Unique random numbers: " + numbers);
}
}
使用Random类和自定义方法
我们可以通过自定义方法来生成随机数,并在方法内部检查随机数是否重复。
实现步骤:
- 创建一个方法,用于生成随机数。
- 在方法内部,使用循环来检查随机数是否已生成。
- 如果重复,则重新生成;如果不重复,则返回该随机数。
import java.util.Random;
public class UniqueRandomNumbers {
private static final Random random = new Random();
public static int generateUniqueRandom(int max) {
int randomNumber;
do {
randomNumber = random.nextInt(max);
} while (isNumberGenerated(randomNumber));
return randomNumber;
}
private static boolean isNumberGenerated(int number) {
// 这里可以添加逻辑来检查number是否已经生成过
// 使用HashSet或TreeSet来存储已经生成的数字
return false; // 假设所有数字都是唯一的
}
public static void main(String[] args) {
int[] uniqueNumbers = new int[10]; // 假设我们需要生成10个不重复的随机数
for (int i = 0; i < uniqueNumbers.length; i++) {
uniqueNumbers[i] = generateUniqueRandom(100); // 生成0-99之间的随机数
}
System.out.println("Unique random numbers: ");
for (int number : uniqueNumbers) {
System.out.println(number);
}
}
}
使用Java 8的Stream API
Java 8引入了Stream API,我们可以使用它来生成一个不重复的随机数列表。

实现步骤:
- 使用
IntStream生成一个随机数流。 - 使用
distinct()方法来确保所有元素都是唯一的。 - 使用
limit()方法来限制流的大小。
import java.util.Random;
import java.util.stream.IntStream;
public class UniqueRandomNumbers {
public static void main(String[] args) {
Random random = new Random();
int count = 10; // 假设我们需要生成10个不重复的随机数
IntStream stream = random.ints(0, 100).distinct().limit(count);
System.out.println("Unique random numbers: " + stream);
}
}
通过以上方法,我们可以有效地在Java中生成不重复的随机数,选择哪种方法取决于具体的应用场景和性能要求。



















