将一个小数组复制到一个更大的数组中而不改变目标数组的大小

15

我想把一个小数组复制到一个大数组中。例如:

String arr[] = new String[10]; 

现在我有另一个小数组

String arr1[] = new String[4];

我想将arr1复制到arr中,而不改变更大的数组长度。也就是说,arr应该保持长度为10,并成功地复制所有元素。

请问有人可以告诉我如何实现吗?

5个回答

42

试试这个:

System.arraycopy(arr1, 0, arr, 0, arr1.length);
arr 的大小不会改变(即 arr.length == 10 仍然为 true),但只有前 arr1.length 个元素将被更改。如果您想要将 arr1 的元素复制到 arr 中的某个位置而不是第一个元素,请指定该位置:
System.arraycopy(arr1, 0, arr, offset, arr1.length);

如果存在偏移量非常大以致于结果超出目标数组的末尾的可能性,那么您需要检查这一点以避免出现异常:

System.arraycopy(arr1, 0, arr, offset,
    Math.max(0, Math.min(arr1.length, arr.length - offset - arr1.length)));

+1,因为此解决方案是“动态的”,可以随着数组长度的增加而增长。 - DonCallisto

6
为了解决这个问题,只需遍历小数组并将它们添加到大数组中。
   for(int i = 0; i < arr1.length(); ++i) {
      arr[i] = arr1[i];
    }

4
这似乎是一个非常简单的问题:
for (int i = 0; i < 4; i++) arr[i] = arr1[i];

数组大小将缩小到4。我想要大小为10。 - kailash gaur
6
不会。剩下的项目不会改变,但是数组的长度将保持不变。 - Matzi

1
如果您想保留在arr中超出arr1长度的值,请执行以下操作:
for(int i = 0; i < arr1.length(); i++){
    if(i < arr.length()){ // Just in case arr isn't larger
        arr[i] = arr1[i];
    }
}

如果您想重置超出arr1长度的arr中的值,请执行以下操作:
for(int i = 0; i < arr.length(); i++){
    if(i < arr1.length()){ // Just in case arr isn't larger
        arr[i] = arr1[i];
    } else {
        arr[i] = 0; // Or whatever default value you want here
    }
}

0
for (int i = 0; i < 4; i++) 
{
arr[i] = arr1[i];
}

会完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接