@634

arraycopy vs ループ vs clone

Advertisement

特徴

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 msec
arraycopy > ループ > clone

cloneメソッドを使用する場合、キャストを行わなければならないためコストが高くなってしまっていると考えられる。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール