簡體   English   中英

將字符串列表轉換為字符串數組 - (String [])list.toArray()和list.toArray(new String [0])之間的區別

[英]Convert list of strings to array of strings - difference between (String[])list.toArray() and list.toArray(new String[0])

我在Java中有一個List<String> ,並希望將其轉換為數組。

起初,我使用了toArray語法,它將一個數組作為輸入,但后來切換到無參數版本,即我從:

String[] myArray = myList.toArray(new String[0]);

String[] myArray = (String[])myList.toArray();

閱讀文檔 (我的基礎類型是ArrayList),似乎功能應該是相同的。 我認為后一版本效率更高,因為它不需要分配和收集一個空數組。 我錯過了任何微妙的差異嗎?

(注意:我問的原因是GWT確實以不同的方式處理語句。后者給出了動態轉換錯誤而前者沒有。我只是想知道這是否是我如何使用GWT的一個細微差別我如何使用Java的細微差別。)

謝謝!

toArray()返回一個Object[] ,而不是String[] (請記住:Java中的泛型按類型擦除工作,因此ArrayList<String>實際上可以包含一個Number ),因此動態轉換錯誤 (又稱ClassCastException )。

使用toArray(…)的常用方法是傳遞適當大小的數組,因此不需要重新分配:

String[] myArray = myList.toArray(new String[myList.size()]);

在您的示例中,由於您指定的原因,選項2的效率稍高。

String[] myArray = myList.toArray(new String[0]); /* option 1 */
String[] myArray = (String[])myList.toArray();    /* option 2 */

還有第三種選擇可以避免任何不必要的分配,並避免選項2中潛在的轉換問題:

String[] myArray = myList.toArray(new String[myList.size()]); /* option 3 */

在java 8中,它可以通過實現

String[] myArray = myList.stream().toArray(String[]::new)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM