java对数组复制一定掌握的五种方法

本文详细介绍了Java中四种常见的数组复制方法:1) 循环赋值,通过for循环逐个元素复制;2) 利用System.arraycopy()进行浅复制;3) 使用Arrays.copyOf()进行数组复制;4) 通过Arrays.copyOfRange()复制数组的一部分;5) 调用Object.clone()进行浅拷贝。这些方法各有特点,适用于不同的场景。

1.循环赋值

循环赋值是Java数组复制的最简单的方法。

public class Main {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] result = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            result[i] = array[i];	//循环赋值
        }
        System.out.println(Arrays.toString(result));	//利用Arrays工具类的toString()静态方法输出result数组中的元素。
    }
}

2.利用System类中的静态本地方法arraycopy() (浅复制)

该方法有五个参数,下面是源码

public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);	

Object src:源数组
int srcPos:源数组要复制的开始位置
Object dest:目标数组
int destPos:目标数组放置的开始位置
int length:源数组要把多长的长度复制到目标数组
注意:src 和 dest都必须是同类型或者可以进行转换类型的数组

public class Main {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] result = new int[array.length];
        System.arraycopy(array,0,result,0,array.length);
        System.out.println(Arrays.toString(result));
   	}
}  

3.利用Arrays类中的copyOf()静态方法,Arrays.copyOf()

	(浅复制)底层源码仍然调用 System.arraycopy()静态本地方法

如下是copyOf()方法的源码:第一个参数是要被复制的数组,第二个参数是复制被复制数组中的几个元素,默认从被复制数组索引为0的位置开始复制。

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }
public class Main {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] result = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(result));
    }
}

4.利用Arrays类中的copyOf()静态方法,Arrays.copyOfRange()

(浅复制)底层源码仍然调用 System.arraycopy()静态本地方法

如下是copyOf()方法的源码:第一个参数是要被复制的数组,第二个参数是从哪里开始复制,第三个参数是到哪里停止。 [from,to)左闭右开区间。

    public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }
public class Main {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] result = Arrays.copyOfRange(array,0,array.length);
        System.out.println(Arrays.toString(result));
    }
}

5.Object.clone() protected native 受保护的本地方法

首先要明确clone()方法比较特殊,它是Object类中的方法,对于对象而言,它是深拷贝,但是对于数组而言,它是浅拷贝。

    protected native Object clone() throws CloneNotSupportedException;
public class Main {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] result = array.clone();
        System.out.println(Arrays.toString(result));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小陈呀~

您的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值