文章目录
1. for循环
for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标。
示例代码:
package array;
import java.util.Arrays;
/**
* @Date: 2023-03-14 星期二 14:06
* @Author: Special Care
* @Description: TODO for循环拷贝数组
* @Version: 1.0.0
*/
public class CopyArrayDemo01 {
public static void main(String[] args) {
/**
* for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标。
*/
int[] arr = {11,22,33,44};
int[] brr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
brr[i] = arr[i];
}
System.out.println(Arrays.toString(arr));
System.out.println("拷贝的数组为:" + Arrays.toString(brr));
}
}
运行结果:
2. 调用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 newLength:新数组的长度;可以扩容到原数组长度的2倍
使用这种方法复制数组时,默认从原数组的第一个元素(下标为 0)开始复制,新数组的长度将为 newlength。如果新数组长度 length 大于原数组长度,则新数组中采用默认值0进行填充;如果 newlength 小于原数组长度,则复制到第 length 个元素(下标为 length-1)截止。
这个方法底层调用了System.arraycopy方法:
示例代码:
package array;
import java.util.Arrays;
/**
* @Date: 2023-03-14 星期二 14:21
* @Author: Special Care
* @Description: TODO Arrays.copyOf()方法拷贝数组
* @Version: 1.0.0
*/
public class CopyArrayDemo03 {
public static void main(String[] args) {
/**
* 该方法是整体拷贝。
* int [] original:将要拷贝的原数组
* int newLength:新数组的长度;可以扩容到原数组长度的2倍
* 使用这种方法复制数组时,默认从原数组的第一个元素(下标为 0)开始复制,新数组的长度将为 newlength。
* 如果新数组长度length大于原数组长度,则新数组中采用默认值0进行填充;
* 如果 newlength 小于原数组长度,则复制到第length个元素(下标为length-1)截止。
*
*/
int[] arr = {11,22,33,44,55,66};
int[] brr = Arrays.copyOf(arr,arr.length);
System.out.println(Arrays.toString(arr));
System.out.println("拷贝的数组为:" + Arrays.toString(brr));
}
}
运行结果:
4. copyOfRange()方法
该方法是Arrays 类中的CopyOfRange()方法,该方法用于拷贝某个范围
- int[] original:将要拷贝的原数组
- int from:拷贝数组的起始下标 ,下标值必须在 0 到原数组长度之间;
- int to:拷贝数组的终止下标,且终止下标必须大于等于起始下标,也可以大于 arr.length,如果大于 arr.length,则新数组中剩余的空位置用默认值0进行填充。
示例代码:
package array;
import java.util.Arrays;
/**
* @Date: 2023-03-14 星期二 14:35
* @Author: Special Care
* @Description: TODO copyOfRange()方法拷贝数组
* @Version: 1.0.0
*/
public class CopyArrayDemo04 {
public static void main(String[] args) {
/**
* 该方法是Arrays 类中的 CopyOfRange() 方法,该方法用于拷贝某个范围
* int[] original:将要拷贝的原数组
* int from:拷贝数组的起始下标 ,下标值必须在 0 到原数组长度之间;
* int to:拷贝数组的终止下标,且终止下标必须大于等于起始下标,也可以大于 arr.length,
* 如果大于 arr.length,则新数组中剩余的空位置用默认值0进行填充
*/
int[] arr = {11,22,33,44,55,66,77};
int[] brr = Arrays.copyOfRange(arr,2,5); // 注意:[2,5),所以只能拷下标2~4的元素
System.out.println(Arrays.toString(arr));
System.out.println("拷贝的数组为:" + Arrays.toString(brr));
}
}
运行结果:
5. System.arraycopy()方法
该方法位于System类中,语法形式如下:
使用此方法复制数组时,length+srcPos必须小于等于原数组的长度,同时 length+destPos 必须小于等于新数组的长度,否则报ArrayIndexOutOfBoundsException异常
示例代码:
package array;
import java.util.Arrays;
/**
* @Date: 2023-03-14 星期二 14:44
* @Author: Special Care
* @Description: TODO System.arraycopy()方法拷贝数组
* @Version: 1.0.0
*/
public class CopyArrayDemo05 {
public static void main(String[] args) {
/**
* 使用此方法复制数组时,length+srcPos必须小于等于原数组的长度,
* 同时 length+destPos 必须小于等于新数组的长度,
* 否则报ArrayIndexOutOfBoundsException异常
*/
int[] arr = {11,22,33,44,55,66,77,88};
int[] brr = new int[10];
brr[0] = 100;
brr[1] = 99;
System.arraycopy(arr,0,brr,2,8);
System.out.println(Arrays.toString(arr));
System.out.println("拷贝的数组为:" + Arrays.toString(brr));
}
}
运行结果: