请问java中深度copy一个二维数组是什么意思?怎么用代码实现?

 我来答
匿名用户
推荐于2017-12-16
展开全部
一个二维数组可以看成一个一维数组,每个元素存储一个一维数组首地址的引用,这个没问题吧!
也就是说对于a[][],直接用b[][]=a,或者b[][]=a.clone() 都只是复制了一个引用(包括上面的arraycopy等方法),无法保证数据独立性,就是说a数组值改变会影响到b,反之亦然,这就是浅层复制。
如果二维数组存放类型为基本类型,则只需要b的每一行进行复制(Object.clone()可以保证对基本类型做深层复制api上有写):
b[][]=a.clone();//先利用浅层复制分配新的引用存放地址
for(int i=0;i<a.length;i++){
b[i]=a[i].clone();//a[i]指向数组的内容为基本类型,可以深层复制生成新引用对象
}
如果二维数组表示的是引用类型,则要对每一个元素调用clone(),并且保证所表示的引用类型遵循clone()复写原则。
b[][]=a.clone();//先利用浅层复制分配新的引用存放地址
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
b[i][j]=a[i][j].clone()//为每个元素进行深层复制
}
}

以上是规范写法,实现方法有很多,但一定要记住,单纯的对引用的COPY是没有意义的,编程中要避免。
匿名用户
2013-12-14
展开全部
用一个循环嵌套,把你的数组赋值一下。要么是用java里面的copy函数,很简单的奥。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-14
展开全部
JDK6咯就直接用System.arraycopy(arr1,0,arr2,0,arr1.length)
● ArrayDemo.java
ipmubploirct cjalavas.s uAtirlr.aAyDreramoy s;{
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");
System.out.println();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-14
展开全部
B : arry of Integer;
k : Integer;

k := 0;
for i := 1 to 10 do
if (A[i,1] = 0) and
(A[i,2] = 0) and
(A[i,3] = 0) and
(A[i,4] = 0) and
(A[i,5] = 0) then
else
begin
Inc(k);
SetLength(B, k)
for j := 1 to 5 do
B[i,j] := A[i,j];
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式