2013-05-09 33 views
4

我想將Set轉換爲數組。在設置toArray()方法中需要新的String [0]

Set<String> s = new HashSet<String>(Arrays.asList("mango","guava","apple")); 
String[] a = s.toArray(new String[0]); 
for(String x:a) 
     System.out.println(x); 

它工作正常。但我不明白String[] a = s.toArray(new String[0]);中的new String[0]的意義。

我的意思是最初我試圖String[] a = c.toArray();,但它不會工作。爲什麼需要new String[0]

+1

有點不相關的問題,但我會使用'String [] a = s.toArray(new String [s.size()]);',因此不需要重新分配數組大小。 – 2013-05-09 10:33:53

回答

9

如果它足夠大,它就是要存儲Set的元素的數組;否則,將爲此分配一個相同運行時類型的新數組。

Object[] toArray(),返回Object[],無法投射到String[]或任何其他類型的陣列。

T[] toArray(T[] a)返回一個數組,其中包含該組中的所有元素;返回數組的運行時類型是指定數組的運行時類型。如果該集合適合指定的數組,它將返回其中。否則,將使用指定數組的運行時類型和該組的大小分配一個新數組。

如果你去通過執行代碼(我張貼從OpenJDK代碼),這將是清楚你:

public <T> T[] toArray(T[] a) { 
    if (a.length < size) 
    // Make a new array of a's runtime type, but my contents: 
    return (T[]) Arrays.copyOf(elementData, size, a.getClass()); 
    System.arraycopy(elementData, 0, a, 0, size); 
    if (a.length > size) 
     a[size] = null; 
    return a; 
} 
5

的參數是衆多知名之一的結果Java泛型系統中的侷限性。基本上,該參數是必需的,以便能夠返回正確類型的數組。

相關問題