如何将Java HashSet 转换为原始int数组?

我有一个带有一堆IntegersHashSet 。 我想把它变成一个数组,但是要调用

 hashset.toArray(); 

返回一个Object[] 。 除了手动迭代每个元素之外,还有更好的方法将它转换为int数组吗? 我想将数组传递给

 void doSomething(int[] arr) 

它不会接受Object []数组,即使我尝试像它一样

 doSomething((int[]) hashSet.toArray()); 

Apache的ArrayUtils有这个(它仍然在幕后迭代):

 doSomething(ArrayUtils.toPrimitive(hashset.toArray())); 

他们总是一个检查这样的事情的好地方。

您可以使用Java 8流从任何Collection (包括HashSet )创建int[]

 int[] array = coll.stream().mapToInt(Number::intValue).toArray(); 

当然,库仍在代表您迭代集合(或其他流源)。

除了简洁且没有外部库依赖性之外,如果你有一个非常大的集合要复制,流也可以让你并行。

 public int[] toInt(Set set) { int[] a = new int[set.size()]; int i = 0; for (Integer val : set) a[i++] = val; return a; } 

既然我为你编写了代码,那就不再是那本手册,不是吗? ;)

你可以使用番石榴:

 Ints.toArray(Collection collection) 

即使没有Apache Utils,您也可以将Set转换为Integer[]

 Set myset = new HashSet(); Integer[] array = myset.toArray(new Integer[0]); 

但是,如果你需要int[]你必须遍历集合。

不; 你必须迭代它们。 抱歉。

您还可以使用toArray()方法的toArray(T [] contents)变体。 创建一个与HashSet大小相同的空数组,然后将其传递给toArray()方法:

 Integer[] myarray = new Integer[hashset.size()]; doSomething(hashset.toArray(myarray)); 

您必须更改doSomething()函数以接受Integer[]数组而不是int[] 。 如果这不可行,则必须将toArray返回的值数组转换为int[]