Java之复制数组的四种方式总结

1. 使用Arrays类的copyOf函数

该函数的函数签名如下: T[] copyOf(T[] src, int length)

复制src数组到一个新的数组,新数组的长度为length,如果length > src.length, 则新数组后面多出的空间将用这一种数据类型的默认值填充,如int填充0,如果小于,则截断后面一部分。

import java.util.*;

public class Main {
    public static void main(String[] args)  {
        int[] src = {0, 1 , 2, 3, 4};
        int[] des = Arrays.copyOf(src, 5);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");

        des = Arrays.copyOf(src, 7);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");

        des = Arrays.copyOf(src, 3);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");
        //输出为: 0 1 2 3 4 
        //0 1 2 3 4 0 0 
        //0 1 2 
    }
}

2. 使用Arrays类的copyOfRange方法

该函数的签名如下: T[] copyOfRange(T[] src, int begin, int end)

复制src数组中索引从begin到end的元素到返回数组中,包括begin,不包括end。如果end超出了src数组的范围,则结果数组中的多余空间会用默认值填充。

import java.util.*;

public class Main {
    public static void main(String[] args)  {
        int[] src = {0, 1 , 2, 3, 4};
        int[] des = Arrays.copyOfRange(src, 0, 5);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");

        des = Arrays.copyOfRange(src, 1, 7);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");

        des = Arrays.copyOfRange(src, 3, 5);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");
        //输出为:0 1 2 3 4 
        //1 2 3 4 0 0 
        //3 4 
    }
}

3. 使用System类的arraycopy方法

该函数的方法签名如下:void arraycopy(T[] src, int begin, T[] des, int des_begin, int length)

将src数组从索引begin开始的地方开始复制到des数组的des_begin开始处,一共复制length长度。

public class Main {
    public static void main(String[] args)  {
        int[] src = {0, 1 , 2, 3, 4};
        int[] des = new int[8];
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");
        System.arraycopy(src, 1, des, 3, 4);
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");
        //输出为:0 0 0 0 0 0 0 0 
        //0 0 0 1 2 3 4 0 
    }
}

4.使用Object类的clone方法

该函数的方法签名如下: Object[] clone(); clone方法复制得到的是Object类型的数组,需要强制转型

public class Main {
    public static void main(String[] args)  {
        int[] src = {0, 1 , 2, 3, 4};
        int[] des = (int[])src.clone();
        for (int i = 0; i < des.length; i++) {
            System.out.print(des[i] + " ");
        }
        System.out.println("");

        //输出为:0 1 2 3 4
    }
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务