Java | 配列のコピー

Java Java
スポンサーリンク

主な内容の要点

Javaで配列をコピーする方法にはいくつか種類があり、単純な代入では「同じ配列を共有」してしまうので注意が必要です。独立した配列を作りたい場合は、要素ごとにコピーするか、専用メソッドを使います。


配列コピーの基本

  • 代入(=)だけではコピーにならない
    int[] dst = src; とすると、dstsrcは同じ配列を参照する。片方を変更するともう片方も変わる。
  • 独立したコピーを作る方法

1.手動でコピー
for文で要素を1つずつコピーする。

for (int i = 0; i < src.length; i++) {
    dst[i] = src[i];
}
Java

2.Arrays.copyOf メソッド
簡単に新しい配列を作れる。

int[] dst = Arrays.copyOf(src, src.length);
Java

3.System.arraycopy メソッド
部分コピーや高速コピーに便利。

System.arraycopy(src, 0, dst, 0, src.length);
Java

シャローコピーとディープコピー

  • シャローコピー(浅いコピー)
    配列の要素が「参照型(オブジェクト)」の場合、コピー先も同じオブジェクトを参照する。
    → 元のオブジェクトを変更するとコピー先にも影響する。
  • ディープコピー(深いコピー)
    オブジェクトそのものを新しく作り直してコピーする。
    → 元の変更がコピー先に影響しない。
    例:
dst[i] = new MyTest(src[i].num);
Java

初心者が覚えておくべきポイント

  • 代入はコピーではなく「同じものを指す」だけ
  • 独立した配列が欲しいなら Arrays.copyOfSystem.arraycopy を使う
  • オブジェクト配列の場合はシャローコピーになるので注意
  • 必要ならディープコピーを自分で実装する

このページは「配列コピーの基本」と「シャローコピーとディープコピーの違い」を理解するのに最適です。まずは Arrays.copyOf を使ってみるのがおすすめです。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました