我有Array
和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复制到stringArray。我尝试使用ArrayList.toArray()
方法,但将 null 设置为Array
的第四元素。如果不使用 for循环
预期的O / P
{"p","q","r","d","e"}
答案 0 :(得分: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
。
答案 1 :(得分:3)
数组具有静态内存声明,因此无法增加单元格数。
要执行此操作,您可以使用Arrays.asList(stringArray);
将stringArray转换为列表
然后添加两个列表,最后将其转换回数组。
答案 2 :(得分:2)
ArrayList.toArray
的行为与您所看到的一样(将List末尾后的元素设置为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.)
您可以将List转换为新数组,然后将该数组复制到原始数组的开头。
String arr2 = stringList.toArray(new String[stringList.size()]);
System.arraycopy (arr2, 0, stringArray, 0, arr2.length);
答案 3 :(得分:2)
如果你的stringList包含的字符串数量少于或等于stringArray,你可以这样做:
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;
}