【JavaSE】数组复制的几种方式

找准方向,全力出击


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为复制的长度。
它实现的机制如下

  1. 检查源数组和目标数组是否为空,如果为空则抛出NullPointerException异常。
  2. 检查源数组和目标数组的起始位置和长度是否合法,如果不合法则抛出IndexOutOfBoundsException异常。
  3. 判断源数组和目标数组是否引用同一对象,如果是则直接返回,因为复制已经完成。
  4. 根据源数组和目标数组的类型信息以及长度信息创建新的元素数组。
  5. 使用循环结构复制源数组中的元素到目标数组中。
    栗子如下
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),则需要对数组中每个元素进行递归复制。

哒哒


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值