java复制数组
1.1for循环
package ztext;
import java.util.Arrays;
/**
* @author xgj
*/
public class MyTest {
public static void main(String[] args) {
int[] oldArray = new int[]{1,2,3,4,5,6};
int[] newArray = new int[oldArray.length];
for(int index = 0 ; index < oldArray.length ; ++index){
newArray[index] = oldArray[index];
}
System.out.println(Arrays.toString(oldArray));
System.out.println(Arrays.toString(newArray));
}
}
属于深复制,但是效率最低。
1.2System.arraycopy函数
package ztext;
import java.util.Arrays;
/**
* @author xgj
*/
public class MyTest {
public static void main(String[] args) {
int[] oldArray = new int[]{1,2,3,4,5,6};
int[] newArray = new int[oldArray.length];
System.arraycopy(oldArray ,0,newArray,0,oldArray.length);
System.out.println(Arrays.toString(oldArray));
System.out.println(Arrays.toString(newArray));
}
}
效率最高,如果复制的是一维的(int,double)这些基本类型的数组,则发生的是值传递,但是像是二维数组,修改原数组或者新数组会影响另一个的值,java中其实没有二维数组的概念,二维数组只是一个一维数组存放着一堆一维数组的引用。
1.3Arrays.copyof
package ztext;
import java.util.Arrays;
/**
* @author xgj
*/
public class MyTest {
public static void main(String[] args) {
Integer[] oldArray = new Integer[]{1,2,3,4,5,6};
Integer[] newArray = Arrays.copyOf(oldArray,oldArray.length);
System.out.println(Arrays.toString(oldArray));
System.out.println(Arrays.toString(newArray));
}
}
和System.arraycopy的区别在于会创建一个新的数组,其实底层也是由System.arraycopy实现的,多了一个创建数组的过程。效率稍微比System.arraycopy慢点。
1.4clone()方法
java.lang.Object类的clone()方法为protected类型,不可直接调用,需要先对要克隆的类进行下列操作: 首先被克隆的类实现Cloneable接口;然后在该类中覆盖clone()方法,并且在该clone()方法中调用super.clone();这样,super.clone()便可以调用java.lang.Object类的clone()方法。 (java自带类直接使用)
package ztext;
import java.util.Arrays;
/**
* @author xgj
*/
public class MyTest {
public static void main(String[] args) {
Integer[] oldArray = new Integer[]{1,2,3,4,5,6};
Integer[] newArray = oldArray.clone();
System.out.println(Arrays.toString(oldArray));
System.out.println(Arrays.toString(newArray));
}
}
继承自java.lang.Object类的clone()方法是浅复制, 在编写程序时要注意这个细节。可以自己覆盖该方法实现深复制。