Java中复制数组的四种方法

Arrays类:copyOf()、copyOfRange()

System类:arraycopy()

Object类:clone()

一、public static int[] copyOf(int[] original, int newLength)

产生一个新数组,新数组的长度任意,故newLength可以是:

1.大于原数组

当新数组的长度大于原数组,则新数组复制完原数组以后在后面补默认值

2.小于原数组

复制原数组的前newLength项

3.为0

产生一个类型相同的空数组,长度为0

int[] nums = {-10, -3, 1, 5, 9};
int[] nums1= Arrays.copyOf(nums, 0);

二、public static T[] copyOfRange(T[] original, int from, int to)

产生一个新数组,新数组的长度任意。与python中range一样,包含左不包含右。

1.右边界等于左边界

返回一个与原数组类型的空数组,长度为0

2.右边界大于原数组长度

复制完原数组的数据后在后面补默认值

3.0<=from<to<=original.length

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

因为是在已存在的两个数组间进行复制,故对参数的要求严格,不能越界。
srcPos + length <= src.length
destPos + length <= src.length

int[] nums = {1,2,3,4,5,6};
int[] nums1= {6,7,8,9,0};
System.arraycopy(nums,2,nums1,2,2);

四、clone()

clone是object类的方法,使用一段新的内存复制原来的数组产生一个新数组,新数组之前可以是存在的如nums1,也可以是不存在的如nums2

public class Test {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6};
        int[] nums1 = {9, 8, 7};
        System.out.println(nums1.length);//3
        nums1 = nums.clone();
        System.out.println(nums1.length);//6
        System.out.println(nums == nums1);//false
        System.out.println(nums.equals(nums1));//false
        for (int i = 0; i < nums1.length; i++) {
            System.out.print(nums1[i] + " ");//1 2 3 4 5 6 
        }
        System.out.println();
        int[] nums2 = nums.clone();
        System.out.println(nums1 == nums2);//false
        System.out.println(nums1.equals(nums2));//false
        nums1 = nums;
        System.out.println(nums1 == nums);//true
        System.out.println(nums1.equals(nums));//true
    }
}
发布了12 篇原创文章 · 获赞 5 · 访问量 948

猜你喜欢

转载自blog.csdn.net/Seventeen0084/article/details/99689977