java语言复制数组的四种方法
参考:http://www.cnblogs.com/dream-it-possible/p/7018804.html
来源于牛客网的一道选择题:
JAVA语言的下面几种数组复制方法中,哪个效率最高?
A.for循环逐一复制
B.System.arraycopy
C.System.copyof
D.使用clone方法
效率:System.arraycopy > clone > Arrays.copyOf > for循环
1、System.arraycopy的用法:
其为native方法,即原生态方法,关键字native说明它不是用java语言写的,而是调用其他语言的代码,因此效率最高
- public static void native arraycopy(Object src,
- int srcPos,
- Object dest,
- int destPos,
- int length)
参数: src
- 源数组。
srcPos
- 源数组中的起始位置。
dest
- 目标数组。
destPos
- 目标数据中的起始位置。
length
- 要复制的数组元素的数量
2、clone 的用法
class Aby implements Cloneable{
public int i;
public Aby(int i) {
this.i = i;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
public class Solution {
public static void main(String[] args) throws CloneNotSupportedException {
Aby aby1 = new Aby(1);
Aby aby2 = (Aby) aby1.clone();
aby1.i = 2;
System.out.println(aby1.i); //2
System.out.println(aby2.i); //1
Aby[] arr = {aby1,aby2};
Aby[] arr2 = arr.clone();
arr2[0].i = 3;
System.out.println(arr[0].i); //3
System.out.println(arr2[0].i); //3
}
}
3、Arrays.copyOf 的用法:
有十种重载方法,复制指定的数组,返回原数组的副本。具体可以查看jdk api
java.util.Arrays.Arrays.copyOf(源数组,新数组长度);
java.util.Arrays.copyOfRange(源数组,开始拷贝位置,结束拷贝位置);
它的源代码
+ View code
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;
}
实际上它调用的就是System.arraycopy。
4、for循环
代码灵活,但效率低公司简介