找准方向,全力出击
文章目录
- 1. Arrays.copyOf()
- 2. System.arraycopy()
- 3. for循环
- 4. clone()
1. Arrays.copyOf()
它的语法为
public static <T> T[] copyOf(T[] original, int newLength)
方法返回值为一个数组,newLength为数组的新长度,若新长度大于原数组长度,则需要在空余出补上默认元素值,0或者null.
应用如下
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
2. System.arraycopy()
它的语法为
public static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
src为源数组,srcPos为源数组起始位置。
dest为目标数组,destPos为目标数组要复制的起始位置,length为复制的长度。
它实现的机制如下
- 检查源数组和目标数组是否为空,如果为空则抛出NullPointerException异常。
- 检查源数组和目标数组的起始位置和长度是否合法,如果不合法则抛出IndexOutOfBoundsException异常。
- 判断源数组和目标数组是否引用同一对象,如果是则直接返回,因为复制已经完成。
- 根据源数组和目标数组的类型信息以及长度信息创建新的元素数组。
- 使用循环结构复制源数组中的元素到目标数组中。
栗子如下
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
3. for循环
for循环遍历数组
int[] arr1 = { 1, 2, 3 };
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];
}
4. clone()
举例如下
int[] numbers = {1, 2, 3, 4, 5};
int[] clonedNumbers = numbers.clone();
clone()方法返回的是一个浅拷贝(Shallow Copy)的数组,即只复制了数组本身及其元素的引用。
如果需要深拷贝(Deep Copy),则需要对数组中每个元素进行递归复制。
哒哒