System.arraycopy()、Arrays.copyOf()、Arrays.copyOfRange()用法介绍

 System.arrayCopy

介绍

System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。

对于一维基础数据类型数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。

System.arrayCopy(Object srcArray,int srcPos,Object destArray ,int destPos,int length)

Object   src :        原数组
int      srcPos :     从元数据的起始位置开始
Object   dest :       目标数组
int      destPos :    目标数组的开始起始位置
int      length  :    要copy的数组的长度

示例

String[] array = new String[]{"1","2","3","4","5","6","7","8"};
String[] systemArrayTemp = new String[8];
System.arraycopy(array,3,systemArrayTemp,2,5);
//从数组array里面的第3个元素开始,拷贝到systemArrayTemp第2个元素之后的位置,长度是5,超出长度报错
System.out.println(Arrays.toString(systemArrayTemp));

运行结果

System.arraycopy(array,3,systemArrayTemp,2,5) 
从数组array里面的第3个元素开始,拷贝到systemArrayTemp第2个元素之后的位置,长度是5
[null, null, 4, 5, 6, 7, 8, null]

Arrays.copyOf

介绍

        Arrays的copyOf()方法传回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组。

copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值

public static <T> T[] copyOf(T[] original, int newLength) { 
    return (Object[])copyOf(var0, var1, var0.getClass()); 
}
original    需要拷贝的原始数组
newLength   拷贝元素长度,如果超出原始数组的长度则补充默认值,如int型则补充0

示例

String[] array = new String[]{"1","2","3","4","5","6","7","8"};
//Arrays.copyOf(array,3) 拷贝数组array里面的前3个元素
String[] arrayOfCopy = Arrays.copyOf(array,3);
System.out.println(Arrays.toString(arrayOfCopy));

//拷贝数组array的10个元素,因为数组总长才8,所以超出的补默认值null
String[] arrayOfCopyOut = Arrays.copyOf(array,10);
System.out.println(Arrays.toString(arrayOfCopyOut));

运行结果

Arrays.copyOf(array,3) 拷贝数组array里面的前3个元素
[1, 2, 3]

Arrays.copyOf(array,10) 拷贝数组array的10个元素,因为数组总长才8,所以超出的补默认值
[1, 2, 3, 4, 5, 6, 7, 8, null, null]

Arrays.copyOfRange

介绍

        Arrays.copyOfRange方法复制指定的数组到一个新的数组,相比copyOf()可以指定需要复制元素的文职。

        其中T[] original是要复制的数组,from是复制开始位置的元素的序号(包括这个元素),to复制结束位置的序号(不包括这个元素)

public static <T> T[] copyOfRange(T[] original, int from, int to) {
    return copyOfRange(var0, var1, var2, var0.getClass());
}

original    需要拷贝的原始数组
from        拷贝开始元素的位置(从0开始计算)
to          拷贝结束元素的位置(从0开始计算),不包括当前位置,超出补充默认值

示例

String[] array = new String[]{"1","2","3","4","5","6","7","8"};
//拷贝数组array里面的第3个元素到第6个元素
String[] arrayOfCopyRange = Arrays.copyOfRange(array,2,6);
System.out.println(Arrays.toString(arrayOfCopyRange));
       

//拷贝数组array里面的第3个元素到第10个元素,超出2个补充默认值
String[] arrayOfCopyRangeOut = Arrays.copyOfRange(array,2,10);
System.out.println(Arrays.toString(arrayOfCopyRangeOut));
       

运行结果

Arrays.copyOfRange(array,2,6) 拷贝数组array里面的第3个元素到第6个元素
[3, 4, 5, 6]

Arrays.copyOfRange(array,2,10) 拷贝数组array里面的第3个元素到第10个元素,超出2个补充默认值
[3, 4, 5, 6, 7, 8, null, null]

完整示例

public class MyClass {
    public static void main(String [] args){
        String[] array = new String[]{"1","2","3","4","5","6","7","8"};

        System.out.println("Arrays.copyOf(array,3) 拷贝数组array里面的前3个元素");
        String[] arrayOfCopy = Arrays.copyOf(array,3);
        System.out.println(Arrays.toString(arrayOfCopy));
        System.out.println("");

        System.out.println("Arrays.copyOf(array,10) 拷贝数组array的10个元素,因为数组总长才8,所以超出的补默认值");
        String[] arrayOfCopyOut = Arrays.copyOf(array,10);
        System.out.println(Arrays.toString(arrayOfCopyOut));
        System.out.println("");
        System.out.println("");

        System.out.println("Arrays.copyOfRange(array,2,6) 拷贝数组array里面的第3个元素到第6个元素");
        String[] arrayOfCopyRange = Arrays.copyOfRange(array,2,6);
        System.out.println(Arrays.toString(arrayOfCopyRange));
        System.out.println("");

        System.out.println("Arrays.copyOfRange(array,2,10) 拷贝数组array里面的第3个元素到第10个元素,超出2个补充默认值");
        String[] arrayOfCopyRangeOut = Arrays.copyOfRange(array,2,10);
        System.out.println(Arrays.toString(arrayOfCopyRangeOut));
        System.out.println("");

        // Object src :     原数组
        // int srcPos :     从元数据的起始位置开始
        // Object dest :    目标数组
        // int destPos :    目标数组的开始起始位置
        // int length  :    要copy的数组的长度

        String[] systemArrayTemp = new String[8];
        System.arraycopy(array,3,systemArrayTemp,2,5);
        System.out.println("System.arraycopy(array,3,systemArrayTemp,2,5) 从数组array里面的第3个元素开始,拷贝到systemArrayTemp第2个元素之后的位置,长度是5,超出长度报错");
        System.out.println(Arrays.toString(systemArrayTemp));

    }

}

以上是结合参考资料自己的一些总结,如有错误欢迎指正

参考资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值