2015-04-30 72 views
2

我有一個ArrayArrayList像下面的ArrayList複製數據到一個陣列

String[] stringArray = new String[] {"a","b","c","d","e"}; 

List<String> stringList = new ArrayList<>(); 
stringList.add("p"); 
stringList.add("q"); 
stringList.add("r"); 

我想的StringList複製到字符串數組。我用ArrayList.toArray()方法嘗試過,但它設置了null第四個元素的Array。有沒有什麼辦法可以不使用for循環

預期的O/P

{"p","q","r","d","e"} 
+0

您希望得到什麼結果? –

+0

如果stringList包含比stringArray更多的值,會發生什麼? – 0riginal

+0

@Original然後完整的數組應該由列表創建 –

回答

4

如果你想只覆蓋現有的stringArray元素,不接觸那些更遠的指標,使用System#arraycopy(Object, int, Object, int, int)

// Convert list to array 
String[] stringListAsArray = stringList.toArray(new String[] {}); 

// Copy 
System.arraycopy(stringListAsArray, 0, 
       stringArray, 0, stringListAsArray.length); 

此外,確保stringList不超過stringArray否則你再將獲得IndexOutOfBoundsExceptions

3

陣列通過做這靜態存儲聲明因此,你可以在不增加細胞數量。

要做到這一點,您可以使用Arrays.asList(stringArray); 將字符串數組轉換爲列表,然後添加兩個列表並最終將其轉換回數組。

+1

你可以嘗試一個'Arrays.copy'方法或'System.arraycopy' ... – MadProgrammer

2

ArrayList.toArray的行爲,你看到的(設置的元素列表的末尾爲null以下):

* <p>If the list fits in the specified array with room to spare 
* (i.e., the array has more elements than the list), the element in 
* the array immediately following the end of the collection is set to 
* <tt>null</tt>. (This is useful in determining the length of the 
* list <i>only</i> if the caller knows that the list does not contain 
* any null elements.) 

您可以在列表轉換到一個新的數組,然後該數組複製到原始的開始陣列。

String arr2 = stringList.toArray(new String[stringList.size()]); 
System.arraycopy (arr2, 0, stringArray, 0, arr2.length); 
2

如果您的StringList包含喜歡你的字符串數組字符串小於或等於號碼,你可以做這樣的:

for (int i = 0; i < stringList.size(); i++) { 
     stringArray[i] = stringList.get(i); 
    } 

更新 這樣將更新現有的陣列或從使用生成的數組列出它是否包含更多值

String[] listAsArray = stringList.toArray(new String[stringList.size()]); 
    if (listAsArray.length <= stringArray.length) { 
     for (int i = 0; i < listAsArray.length; i++) { 
      stringArray[i] = listAsArray[i]; 
     } 
    } else { 
     stringArray = listAsArray; 
    } 
相關問題