文章目录
- 概述
- 方法一:运用for循环进行拷贝
- 方法二:Java内置方法进行拷贝
- 方法三:指定区间进行拷贝
概述
数组拷贝。
注意:
public static void main(String[] args) {
int[] array1 = {1,2,3,4};
System.out.println(myToString(array1));
int[] array2 = array;
System.out.println(myToString(array2));
}
这不叫拷贝,因为此时只有一个数组对象。
方法一:运用for循环进行拷贝
public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = new int[array1.length]; //开辟新的内存空间,存arry1.length个数据
for (int i = 0; i < array1.length; i++) {
array2[i] = array1[i];
}
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
//执行结果
[1, 2, 3, 4]
[1, 2, 3, 4]
方法二:Java内置方法进行拷贝
用 Array.copyOf()
方法
其功能:
- 拷贝
- 扩容
public static void main(String[] args) {
int[] array = {1,2,3,4};
//拷贝
int[] array1 = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array1));
System.out.println("=======================");
//扩容
int[] array2 = Arrays.copyOf(array,array.length*2);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
【输出结果】
方法三:指定区间进行拷贝
此方法的底层源码:
public static native void arraycopy(Object src, int srcPos, Object desc, int destPos,int length);
- src:从哪里拷贝
- srcPos:从拷贝数组的哪个位置开始拷贝
- dest:拷贝到哪里
- destPos:从拷贝数组的拷贝到哪个位置
- length:拷贝多长
public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = new int[array1.length]; //开辟新的内存空间,存arry1.length个数据
System.arraycopy(array1,1,array2,0,array1.length-1); //从array1的0位置开始,拷贝到array2的0下标下,且拷贝的长度为array1.length-1
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
//输出结果
[1, 2, 3, 4]
[2, 3, 4, 0]
【也可以缩小拷贝】
public static void main(String[] args) {
int[] array1 = {1,2,3,4};
int[] array2 = Arrays.copyOf(array1,array1.length/2);
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
//输出结果
[1, 2, 3, 4]
[1, 2]