2011-07-01 126 views
0

Collection。 toArray 我們使用上述方法將List<String>對象轉換爲等效的String[]Collection.toArray()的正確語法是什麼?

List<String> foos = new ArrayList<String>(); 
// foos.toArray(new String[0]); 
// foos.toArray(new String[foos.length]); 

這將是正確的方法來使用,以將其轉換成數組。

+0

foos.toArray(新的String [foos.length] );似乎更好... – doNotCheckMyBlog

回答

3

這一個:

foos.toArray(new String[foos.size()]); 

是正確的使用。如果您給toArray一個太短的數組以適合列表,toArray將分配一個新數組,而不是將元素存儲在您提供的數組中。這意味着Java將分配兩個數組而不是一個,這樣會浪費幾個時鐘週期。

+0

它是foos.size() –

+0

@Maurice:是的,這是正確的。我剛剛從問題中複製了代碼... –

2

如果你看到兩個函數的簽名,你會清楚地看到最後的區別。

Object[] toArray(); 

返回的數組將保持「安全」,因爲此集合不會引用它。 (換句話說,即使該集合由數組支持,該方法也必須分配一個新數組)。調用者可以自由修改返回的數組。

此方法充當基於數組和基於集合的API之間的橋樑。

<T> T[] toArray(T[] a); 

a到其中此集合中的元素將被存儲,如果它是足夠大的陣列;否則,將爲此分配一個相同運行時類型的新數組。

+0

所以,我應該使用foos.length,正確嗎? – Joe

+0

這一切都取決於你正在工作的集合。在'ArrayList'中最好傳遞Length。但在'LinkedList'中它不是必需的。 –

+0

但我會建議你應該通過它的長度。 –

1
String array[] = foos.toArray(new String[foos.size()]); 

注意,它也將與新的字符串工作[0],但該陣列將需要被重新分配,如果foos.size()> 0