new string[0]的作用
比如:String[] result = set.toArray(new String[0]);
Collection的公有方法中,toArray()是比較重要的一個。
但是使用無參數的toArray()有一個缺點,就是轉換后的數組類型是Object[]。 雖然Object數組也不是不能用,但當你真的想用一個具體類型的數組,比如String[]時,問題就來了。而把Object[]給cast成 String[]還是很麻煩的,需要用到這個:
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
不管是從哪方面看還是一開始就弄成String[]比較好。
具體怎么辦呢?其實用帶參數的toArray就好了。官方是這樣給出的例子:
String[] a = c.toArray(new String[0]);
如果指定的數組能容納該 collection,則返回包含此 collection 元素的數組。否則,將根據指定數組的運行時類型和此 collection 的大小分配一個新數組。這里給的參數的數組長度是0,因此就會返回包含此 collection 中所有元素的數組,並且返回數組的類型與指定數組的運行時類型相同。
像 toArray 方法一樣,此方法充當了基於數組的 API 與基於 collection 的 API 之間的橋梁。更進一步說,此方法允許在輸出數組的運行時類型上進行精確控制,並且在某些情況下,可以用來節省分配開銷。
假定 l 是只包含字符串的一個已知 List。以下代碼用來將該列表轉儲到一個新分配的 String 數組:
String[] x = (String[]) v.toArray(new String[0]);
注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。
參數:
a - 存儲此 collection 元素的數組(如果其足夠大);否則,將為此分配一個具有相同運行時類型的新數組。
1 public <T> T[] toArray(T[] a) { 2 int size = size(); 3 if (a.length < size) 4 return Arrays.copyOf(this.a, size, 5 (Class<? extends T[]>) a.getClass()); 6 System.arraycopy(this.a, 0, a, 0, size); 7 if (a.length > size) 8 a[size] = null; 9 return a; 10 }