Java数组拷贝
1、for循环
for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标。
2、Object类中的clone()方法
该方法是类Object类中的方法;使用clone方法进行拷贝时,是将arr中的所有元素都拷贝下来,不可以挑选。 clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型。
package array;
import java.util.Arrays;
/**
* @Date: 2023-03-14 星期二 14:16
* @Author: Special Care
* @Description: TODO clone()方法拷贝数组
* @Version: 1.0.0
*/
public class CopyArrayDemo02 {
public static void main(String[] args) {
/**
* 该方法是类Object类中的方法;使用clone方法进行拷贝时,是将arr中的所有元素都拷贝下来,不可以挑选。
* clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型。
*/
int[] arr = {11,22,33,44,55};
int[] brr = arr.clone();
System.out.println(Arrays.toString(arr));
System.out.println("拷贝的数组为:" + Arrays.toString(brr));
}
}
3、Arrays类中的Arrays.copyOf()方法
方法原型
// 直接拷贝全量数组元素
// int [] original:将要拷贝的原数组
// int newArrLength:新数组的长度;可以扩容到原数组长度的2倍
copyOf(int[] original, int newArrLength)
使用这种方法复制数组时,默认从原数组的第一个元素(下标为 0)开始复制,新数组的长度将为 newlength。如果新数组长度 length 大于原数组长度,则新数组中采用默认值0进行填充;如果 newlength 小于原数组长度,则复制到第 length 个元素(下标为 length-1)截止。
用法示例
int[] tempArr = new int[]{1,2,3,4,5,6,7,8,9};
int[] testArr1 = Arrays.copyOf(tempArr, 6);
for (int i : testArr1) {
System.out.println(i);
}
输出
1
2
3
4
5
6
4、Arrays类中的CopyOfRange()方法
方法原型
// 对原数组某一下标范围数组进行拷贝
// int[] original:将要拷贝的原数组
// int beginIndex:拷贝数组的起始下标 ,下标值必须在 0 到原数组长度之间;
// int endIndex:拷贝数组的终止下标,且终止下标必须大于等于起始下标,也可以大于 arr.length,如果大于 arr.length,则新数组中剩余的空位置用默认值0进行填充。
copyOfRange(int[] original, int beginIndex, int endIndex)
用法示例
int[] tempArr = new int[]{1,2,3,4,5,6,7,8,9};
int[] testArr2 = Arrays.copyOfRange(tempArr, 3, 7);
for (int i : testArr2) {
System.out.println(i);
}
输出
4
5
6
7
5、System类中的arraycopy()方法
该方法位于System类中,语法形式如下:
arraycopy(Obiect src, int srcIndex, Object dest, int destIndex, int length)
使用此方法复制数组时,length+srcPos必须小于等于原数组的长度,同时 length+destPos 必须小于等于新数组的长度,否则报ArrayIndexOutOfBoundsException异常
用法示例:
int[] tempArr = new int[]{1,2,3,4,5,6,7,8,9};
int[] testArr3 = new int[3];
System.arraycopy(tempArr, 3, testArr3, 0, 3);
for (int i : testArr3) {
System.out.println(i);
}
输出
4
5
6