数组拷贝的五种方法

对一维数组而言,仅不开辟空间的直接赋值为浅拷贝(brr=arr)

数组拷贝有5种方法
1.for
2.System.arraycopy(src,srcpos,dest,destpos,length)
3.Arrays.copyof( original, newlength)
4.clone()
5.Arrays.copyOfRange(original,from,to)

1.for循环遍历数组对元素一一进行赋值操作(对于多维数组来说是浅拷贝)
2.调用 System.arraycopy(src,srcpos,dest,destpos,length)//必须保证dest有足够容量;

int[] arr = {1,2,3,4,5,6};
int[] brr = new int[arr.length];
System.arraycopy(arr,1,brr,0,5);
System.out.println(Arrays.toString(brr));   //[2, 3, 4, 5, 6, 0]

3.调用Arrays.copyof( original, newlength);//original:原数组,newlength:开辟大小为新数组长度的空间
该函数调用Systrm.arrayscopy()

int[] arr = {1,2,3,4,5,6};
int[] brr = {1};
brr =Arrays.copyOf(arr,3);
System.out.println(Arrays.toString(brr));  //[1, 2, 3]
brr =Arrays.copyOf(arr,6);
System.out.println(Arrays.toString(brr));  //[1, 2, 3, 4, 5, 6]

由示例可以看到拷贝与dest的初始大小无关所以用该方法可以于给数组进行扩容 arr = Arrays.copyOf(arr,arr.length+3);
同样该方法也可以对数组进行缩容(如果删除元素没有缩容会打印出无效值)
arr = Arrays.copyOf(arr,arr.length-1);
但是该方法是在堆中重新开辟空间,所以必定会改变数组的首地址,所以在方法中对数组进行该操作主函数内不可以调用。

public static void main(String[] args) {
        int[] arr = new int[]{1};
        change(arr);
        System.out.println(arr[0]);  //输出1
    }
    public static void change(int[] arr){
        arr = Arrays.copyOf(arr,arr.length+1);
        arr[0] = 99999;
    }

4.调用object.clone()//对于自己创建的类必须通过接口实现

int[] arr = {1,2,3,4,5,6};
int[] brr = arr.clone();
System.out.println(Arrays.toString(brr));   //[1,2, 3, 4, 5, 6, 0]

5.调用Arrays.copyOfRange(original,from,to)

int[] arr = {1,2,3,4,5,6};
int[]  brr = Arrays.copyOfRange(arr,1,4);
System.out.println(Arrays.toString(brr));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值