arraycopy vs ループ vs cloneAdvertisement特徴java.lang.System.arraycopyメソッドSystemクラスに定義されているメソッドで、最適なアルゴリズムで配列のコピーを行うように実装されている。書式
arraycopy(コピー元配列, コピー元開始位置,
コピー先配列, コピー先開始位置, コピーを行う長さ)
ループループを行い、配列の要素を順にコピーしていく。java.lang.Object.cloneメソッドObjectクラスのcloneメソッドを利用してコピーを作成する。配列の中身がプリミティブではなくオブジェクトの場合、浅いコピーとなるため注意が必要。比較プログラム
public class VSTest{
public static void main(String[] args) {
// オリジナル配列
int[] intArray = new int[1000000];
// コピーの配列
int[] dummyArray = new int[intArray.length];
// arraycopyメソッドでコピーを行う
long startTime = System.currentTimeMillis();
System.arraycopy(intArray, 0, dummyArray, 0, intArray.length);
long endTime = System.currentTimeMillis();
System.out.println((endTime - startTime) + " msec");
// ループでコピーを行う
startTime = System.currentTimeMillis();
for(int i = 0; i < intArray.length; i++){
dummyArray[i] = intArray[i];
}
endTime = System.currentTimeMillis();
System.out.println((endTime - startTime) + " msec");
// cloneメソッドでコピーを行う
startTime = System.currentTimeMillis();
dummyArray = (int[])intArray.clone();
endTime = System.currentTimeMillis();
System.out.println((endTime - startTime) + " msec");
}
}
比較結果10 msec 30 msec 70 msecarraycopy > ループ > clone cloneメソッドを使用する場合、キャストを行わなければならないためコストが高くなってしまっていると考えられる。 Advertisement |
ショートカット・634・634blog ・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログールビリヤード |