Java中Set集合循环生成随机数数量不符预期问题求助
问题原因与解决方法
问题根源
Set集合的核心特性是不存储重复元素。你循环10次生成1-10的随机数,但随机数很可能重复,重复的元素会被Set自动过滤,所以最终集合的元素数量总是少于等于10,且每次结果都不固定。
解决方案
方案一:循环填充直到集合满10个元素
通过while循环持续生成随机数,直到集合大小达到10(因为1-10总共只有10个不重复的数,此时集合会包含所有数字):
private static Set<Integer> losowanie() { Set<Integer> result = new TreeSet<>(); Random random = new Random(); while (result.size() < 10) { result.add(random.nextInt(10) + 1); } return result; }
方案二:先生成全量数据再打乱顺序(更高效)
先把1-10的所有数字存入列表,再打乱顺序后转成Set,避免反复生成随机数碰运气:
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet; private static Set<Integer> losowanie() { List<Integer> numbers = new ArrayList<>(); // 初始化1到10的所有数字 for (int i = 1; i <= 10; i++) { numbers.add(i); } // 随机打乱列表顺序 Collections.shuffle(numbers); // 转换为TreeSet(保持排序),也可以用HashSet return new TreeSet<>(numbers); }
内容的提问来源于stack exchange,提问作者FlyingRacoon51
相关产品推荐
相关产品推荐

