如何有效地将我的 Set 转换为数组?
How can I convert my Set to an array efficiently?
所以我试图生成一个填充了唯一随机整数的数组,我发现使用数组列表执行此操作是最有效的方法。
public static int [] randArr(int n, int max){
randArr = new int[n];
Random rn = new Random();
Set<Integer> test = new HashSet<Integer>();
while(test.size() < n){
test.add(rn.nextInt(0, max));
}
}
现在我尝试使用 randArr = test.toArray()
,但我不太确定应该在括号中添加什么,也不知道这是否真的可行。是否有任何其他转换方法,因为我不能简单地通过 test.get(i)
和 for 循环为 randArr 分配测试整数。
不要使用套装。 Stream
随机数,使用 distinct
删除重复项,并使用 limit
进行限制
public static int [] randArr(int n, int max){
Random rn = new Random();
return rn.ints(0,max).distinct().limit(n).toArray();
}
备注:
- 确保
n is <= max
,否则你可能要等一会儿。
max must be >= 1
(Random.ints
方法要求)
您可能需要添加一些代码来执行这些 invariants
并在不合规时抛出适当的异常。类似于以下内容(或任何对您有意义的内容)。
if (n > max || max <= 0) {
throw new IllegalArgumentException(
"n(%d) <= max(%d) or max > 0 not in compliance"
.formatted(n,max));
}
所以我试图生成一个填充了唯一随机整数的数组,我发现使用数组列表执行此操作是最有效的方法。
public static int [] randArr(int n, int max){
randArr = new int[n];
Random rn = new Random();
Set<Integer> test = new HashSet<Integer>();
while(test.size() < n){
test.add(rn.nextInt(0, max));
}
}
现在我尝试使用 randArr = test.toArray()
,但我不太确定应该在括号中添加什么,也不知道这是否真的可行。是否有任何其他转换方法,因为我不能简单地通过 test.get(i)
和 for 循环为 randArr 分配测试整数。
不要使用套装。 Stream
随机数,使用 distinct
删除重复项,并使用 limit
public static int [] randArr(int n, int max){
Random rn = new Random();
return rn.ints(0,max).distinct().limit(n).toArray();
}
备注:
- 确保
n is <= max
,否则你可能要等一会儿。 max must be >= 1
(Random.ints
方法要求)
您可能需要添加一些代码来执行这些 invariants
并在不合规时抛出适当的异常。类似于以下内容(或任何对您有意义的内容)。
if (n > max || max <= 0) {
throw new IllegalArgumentException(
"n(%d) <= max(%d) or max > 0 not in compliance"
.formatted(n,max));
}