0
0

More than 5 years have passed since last update.

[Java]配列をListにする際のシャローコピーとディープコピー

Last updated at Posted at 2019-06-29

既存の配列からListのオブジェクトを作る際には以下の2つの方法がある。
1. Arrays.asList(配列) を使う
2. ArrayList などのList実装クラスのコンストラクタを使う

Arrays.asList(配列) を使う場合は、シャローコピーとなり参照を渡すだけ。
ArrayList などのList実装クラスのコンストラクタを使う場合は、新規複製となる。

Arrays.asList(配列)

シャローコピーとなり参照を渡すだけ。

        // Arrays.asList()は参照を渡すだけ
        String[] ary = {"a", "b", "c"};
        List<String> list = Arrays.asList(ary);
        //  list.add("d"); // => java.lang.UnsupportedOperationException
        list.set(0, "e");
        System.out.println(Arrays.toString(ary)); //=> [e, b, c] オリジナルの配列も変更されている。
        System.out.println(list);                 //=> [e, b, c]

setでの要素の変更は可能だが、addなど既存の配列の構造を変更する場合はエラーになるので注意。

List実装クラスのコンストラクタ

新規複製となる。


        // ArrayListなどのListの実装クラスでインスタンス化すれば新規作成
        String[] ary2 = {"a", "b", "c"};
        List<String> list2 = new ArrayList<>(Arrays.asList(ary2));
        list2.add("d");
        list2.set(0, "e");
        System.out.println(Arrays.toString(ary2)); //=> [a, b, c]  オリジナルの配列は変更されない。
        System.out.println(list2);                 //=> [e, b, c, d]

new ArrayList<>(配列)はできないので、一度Listオブジェクトに変換する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0