collection.toArray(new String[0])中new String[0]的作用


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         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM