将ArrayList的数据复制到数组中

时间:2015-04-30 06:26:15

标签: java arrays arraylist

我有ArrayArrayList,如下所示

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"}

4 个答案:

答案 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;
    }