參考: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循環
代碼靈活,但效率低公司簡介