如何有效地将我的 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 >= 1Random.ints 方法要求)

您可能需要添加一些代码来执行这些 invariants 并在不合规时抛出适当的异常。类似于以下内容(或任何对您有意义的内容)。

if (n > max || max <= 0) {
   throw new IllegalArgumentException(
                "n(%d) <= max(%d) or max > 0 not in compliance"
                .formatted(n,max));
}