Java講座

知っていると便利な章
4.12. 配列コピー
『目的』

配列から配列へのコピーのお得な方法を知りましょう。

『Before』

配列から配列へコピーするのに何も考えず正直に行うと以下のような実装になりますね。
int[] copyArray(int[] array) {

    int length = array.length;
    int[] copy = new int[length];

    for (int i = 0; i < length; i++) {
        copy[i] = array[i];
    }

    return copy;
}
forループでグルグル繰り返して移し替えしてます。

もっと簡単な方法があります。

『After』

スマートなコピーです。
int[] copyArray(int[] array) {

    int length = array.length;
    int[] copy = new int[length];

    System.arraycopy(array, 0, copy, 0, length); /* for ループを置き換えた。 */

    return copy;
}
forループの繰り返しがなくなった分すっきりしましたね。 おまけにarraycopyはネイティブメソッドなので実行速度の面でも有利です。 欠点はパラメータがちょっとわかりにくいところです。

なお、コピーには2種類のコピーがあることに注意してください。
シャローコピー(shallowコピー)
 コピー先のオブジェクトに対し、そのオブジェクトの参照情報のみ複写する方法です。
 つまりコピー元、コピー先とも同じオブジェクトを参照しています。
 コピー先のオブジェクトの値を変更するとコピー元のオブジェクトの値も変更されます。

ディープコピー(deepコピー)
 コピー先のオブジェクトに対し、参照情報だけでなくオブジェクトの実体も複写する方法です。
arraycopy や「=」によるコピーはシャローコピーになります。

『まとめ』

使えるものは使いましょう。
前のページ   次のページ

当ページ・当社へのご意見やご感想があればお手数ですが「お問い合わせ」までお願いいたします。
当社への就職をお考えの方は「採用情報ページ」までお願いいたします。
C言語を学びたい方は「C言語講座」もどうぞ。