java如何生成随机数不重复的
Java生成不重复随机数的方法
在Java中生成不重复的随机数,可以通过多种方式实现。以下是几种常见的方法:
使用HashSet存储随机数
利用HashSet不允许重复元素的特性,可以确保生成的随机数不重复。每次生成随机数后添加到HashSet中,如果添加失败则重新生成。

import java.util.HashSet;
import java.util.Random;
public class UniqueRandom {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
Random random = new Random();
int count = 10; // 生成10个不重复的随机数
int range = 100; // 随机数范围0-99
while (set.size() < count) {
int num = random.nextInt(range);
set.add(num);
}
System.out.println(set);
}
}
使用Collections.shuffle方法
如果需要生成一定范围内的不重复随机数,可以先将范围内的所有数字存入列表,然后打乱顺序,最后取出前N个数字。

import java.util.ArrayList;
import java.util.Collections;
public class UniqueRandom {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
int range = 100; // 随机数范围0-99
int count = 10; // 生成10个不重复的随机数
for (int i = 0; i < range; i++) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i < count; i++) {
System.out.println(list.get(i));
}
}
}
使用Stream和distinct方法
Java 8及以上版本可以使用Stream和distinct方法生成不重复的随机数。
import java.util.Random;
import java.util.stream.IntStream;
public class UniqueRandom {
public static void main(String[] args) {
Random random = new Random();
int count = 10; // 生成10个不重复的随机数
int range = 100; // 随机数范围0-99
IntStream.generate(() -> random.nextInt(range))
.distinct()
.limit(count)
.forEach(System.out::println);
}
}
使用LinkedHashSet保持顺序
如果需要保持生成的随机数的顺序,可以使用LinkedHashSet。
import java.util.LinkedHashSet;
import java.util.Random;
public class UniqueRandom {
public static void main(String[] args) {
LinkedHashSet<Integer> set = new LinkedHashSet<>();
Random random = new Random();
int count = 10; // 生成10个不重复的随机数
int range = 100; // 随机数范围0-99
while (set.size() < count) {
int num = random.nextInt(range);
set.add(num);
}
System.out.println(set);
}
}
注意事项
- 随机数范围:确保随机数的范围足够大,否则可能无法生成足够数量的不重复随机数。
- 性能问题:如果生成大量不重复随机数,
HashSet方法可能会因为重复尝试而影响性能,此时Collections.shuffle方法更高效。 - 线程安全:在多线程环境下,应使用
ThreadLocalRandom代替Random以提高性能并避免竞争条件。
以上方法可以根据具体需求选择使用。






