Java中数组的5种拷贝方法

在这里插入图片描述

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));
    }
}

运行结果:

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值