Arrays.copyOf() 和 System.arraycopy()
程序员文章站
2024-02-17 12:47:34
...
Arrays.copyOf()
和 System.arraycopy()
都可以完成数组的复制操作,那么区别在什么地方呢?
首先看一下示例代码。
int[] src = new int[] {1, 2, 3, 4, 5};
int[] dest = new int[10];
Arrays.fill(dest, -1);
System.arraycopy(src, 0, dest, 0, 5);
int[] newArr = Arrays.copyOf(src, 3);
System.out.println(Arrays.toString(dest));
System.out.println(Arrays.toString(newArr));
// [1, 2, 3, 4, 5, -1, -1, -1, -1, -1]
// [1, 2, 3]
区别
首先最直观的区别在于:System.arraycopy()
是在原数组的基础上进行复制操作,而Arrays.copyOf()
会返回一个新的数组。
再从源码角度进行一下分析
Arrays.copyOf()
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;
}
我们看到在Arrays.copyOf()
内部新建了一个传入参数 newLength
大小的与源数组同类型的新的数组。然后再调用了System.arraycopy()
方法完成复制操作。
再看看System.arraycopy()
System.arraycopy
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
我们看到,Systemj.arraycopy()
是一个native
方法,其实现是用C语言实现的,因此后者的速度肯定是比前者快的。
小结
-
System.arraycopy
是比Arrays.copyOf
更底层的方法,后者调用前者完成复制操作 -
Arrays.copyOf
是Arrays
类的静态方法,System.arraycopy
是一个native
方法 -
Arrays.copyOf
方法是从0
位置开始复制的,如果要控制复制范围,则使用Arrays.copyOfRange(int[] original, int from, int to)
方法
推荐阅读
-
PHP中抽象类和抽象方法概念与用法分析
-
Leetcode 53. 最大子序和
-
再谈System.arraycopy和Arrays.copyOf
-
System.arraycopy()和Arrays.copyOf()的区别
-
Arrays.copyOf()和System.arrayCopy()的区别
-
Arrays.copyOf() 和 System.arrayCopy()分析
-
Arrays.copyOf() 和 System.arraycopy()
-
Arrays.CopyOf()和System.arraycopy ()
-
php字符串的替换,分割和连接方法
-
System.arraycopy()和Arrays.copyOf()