Collection。 toArray 我們使用上述方法將List<String>
對象轉換爲等效的String[]
。Collection.toArray()的正確語法是什麼?
List<String> foos = new ArrayList<String>();
// foos.toArray(new String[0]);
// foos.toArray(new String[foos.length]);
這將是正確的方法來使用,以將其轉換成數組。
Collection。 toArray 我們使用上述方法將List<String>
對象轉換爲等效的String[]
。Collection.toArray()的正確語法是什麼?
List<String> foos = new ArrayList<String>();
// foos.toArray(new String[0]);
// foos.toArray(new String[foos.length]);
這將是正確的方法來使用,以將其轉換成數組。
這一個:
foos.toArray(new String[foos.size()]);
是正確的使用。如果您給toArray
一個太短的數組以適合列表,toArray
將分配一個新數組,而不是將元素存儲在您提供的數組中。這意味着Java將分配兩個數組而不是一個,這樣會浪費幾個時鐘週期。
它是foos.size() –
@Maurice:是的,這是正確的。我剛剛從問題中複製了代碼... –
如果你看到兩個函數的簽名,你會清楚地看到最後的區別。
Object[] toArray();
返回的數組將保持「安全」,因爲此集合不會引用它。 (換句話說,即使該集合由數組支持,該方法也必須分配一個新數組)。調用者可以自由修改返回的數組。
此方法充當基於數組和基於集合的API之間的橋樑。
<T> T[] toArray(T[] a);
a
到其中此集合中的元素將被存儲,如果它是足夠大的陣列;否則,將爲此分配一個相同運行時類型的新數組。
所以,我應該使用foos.length,正確嗎? – Joe
這一切都取決於你正在工作的集合。在'ArrayList'中最好傳遞Length。但在'LinkedList'中它不是必需的。 –
但我會建議你應該通過它的長度。 –
String array[] = foos.toArray(new String[foos.size()]);
注意,它也將與新的字符串工作[0],但該陣列將需要被重新分配,如果foos.size()> 0
foos.toArray(新的String [foos.length] );似乎更好... – doNotCheckMyBlog