レベル別に練習問題を増やしてみましょう。配列コピーの理解を深めるために、初級・中級・上級の3段階で課題を用意しました。
初級(基本を確認)
- コピーと代入の違いを確認
int[] a = {1,2,3};を作り、int[] b = a;とint[] c = Arrays.copyOf(a, a.length);を用意。b[0]とc[0]を変更して、aにどう影響するかを出力してみよう。
- 部分コピーの練習
int[] nums = {10,20,30,40,50};からSystem.arraycopyを使って中央の[20,30,40]を取り出す。
👉 ゴール: 「代入はコピーじゃない」「コピー方法によって結果が違う」を体感する。
中級(応用)
- 配列の拡張
int[] a = {1,2,3};をArrays.copyOfで長さ5に拡張し、余った部分がどうなるか確認。
- コピーしてソート
int[] data = {5,3,9,1};をコピーして、コピー先だけソート。- 元の配列とコピー先を両方出力して違いを確認。
- 文字列配列のコピー
String[] words = {"apple","banana","cherry"};をコピーして、コピー先だけ1つ書き換える。- 元の配列に影響があるか確認。
👉 ゴール: 「コピーした配列を独立して操作できる」ことを理解する。
上級(オブジェクトと深いコピー)
- 浅いコピーの確認
Bookクラス(titleフィールドのみ)を作り、Book[]配列をコピー。- コピー先の
titleを変更して、元の配列に影響するか確認。
- 深いコピーの実装
- 上の
Book[]を for文で新しいBookを作り直してコピー。 - コピー先を変更しても元に影響しないことを確認。
- 上の
- 複雑なオブジェクトのコピー
Studentクラス(nameとint[] scoresを持つ)を作り、Student[]をコピー。- 浅いコピーだと
scoresが共有されることを確認。 - 深いコピーを実装して、
scoresも独立させる。
👉 ゴール: 「浅いコピーと深いコピーの違い」を理解し、必要に応じて深いコピーを作れるようになる。
練習の進め方
- 初級: まずは「コピーと代入の違い」を確実に理解。
- 中級: 実用的な場面(拡張・ソート・文字列)でコピーを使う。
- 上級: オブジェクト配列で「浅いコピー/深いコピー」の違いを体感。
