知っていると便利な章
4.15. 配列コピー
『目的』
配列から配列へのコピーのお得な方法を知りましょう。
『Before』
配列から配列へコピーするのに何も考えず正直に行うと以下のような実装になりますね。
int[] array; // : int length = array.length; int[] copy = new int[length]; for (int i = 0; i < length; i++) { copy[i] = array[i]; }
forループでグルグル繰り返して移し替えしてます。
もっと簡単な方法があります。
『After』
スマートなコピーです。
int[] array; // : /* for ループを置き換えた。 */ int[] copy = Arrays.copyOf(array, array.length);
forループの繰り返しがなくなった分すっきりしましたね。 おまけにcopyOfは内部的にネイティブメソッドを使用しているので実行速度の面でも有利です。
また、Arraysクラスには範囲を指定して配列をコピーするためのcopyOfRangeメソッドもあります。
新たに配列を生成するのではなく、既存の配列領域にコピーする場合はSystem.arraycopyメソッドの使用も検討してください。
なお、コピーには2種類のコピーがあることに注意してください。
シャローコピー(shallowコピー)
コピー先のオブジェクトに対し、そのオブジェクトの参照情報のみ複写する方法です。
つまりコピー元、コピー先とも同じオブジェクトを参照しています。
コピー先のオブジェクトの値を変更するとコピー元のオブジェクトの値も変更されます。
ディープコピー(deepコピー)
コピー先のオブジェクトに対し、参照情報だけでなくオブジェクトの実体も複写する方法です。
arraycopy や「=」によるコピーはシャローコピーになります。
『まとめ』
使えるものは使いましょう。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針