请问java中深度copy一个二维数组是啥意思?怎么用代码实现?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问java中深度copy一个二维数组是啥意思?怎么用代码实现?相关的知识,希望对你有一定的参考价值。
一个二维数组可以看成一个一维数组,每个元素存储一个一维数组首地址的引用,这个没问题吧!也就是说对于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是没有意义的,编程中要避免。 参考技术A 用一个循环嵌套,把你的数组赋值一下。要么是用java里面的copy函数,很简单的奥。 参考技术B 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();
参考技术C 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;
以上是关于请问java中深度copy一个二维数组是啥意思?怎么用代码实现?的主要内容,如果未能解决你的问题,请参考以下文章
java 类后面跟[][]是啥意思,比如Annotation[][]