Arrays.asListと新しいArrayList(Arrays.asList())
1. 概要
この短いチュートリアルでは、 Arrays.asList(array)と ArrayList(Arrays.asList(array))。の違いを見ていきます。
2. Arrays.asList
Arrays.asListメソッドから始めましょう。
この方法を使用すると、配列から固定サイズに変換できますリスト物体
また、要素の追加または削除は許可されていないため、長さを変更することはできません。
ただし、配列内の単一のアイテムを変更することはできます。 リストの単一のアイテムに対して行ったすべての変更は、元の配列に反映されることに注意してください。
String[] stringArray = new String[] { "A", "B", "C", "D" };
List stringList = Arrays.asList(stringArray);
ここで、stringListの最初の要素を変更するとどうなるか見てみましょう。
stringList.set(0, "E");
assertThat(stringList).containsExactly("E", "B", "C", "D");
assertThat(stringArray).containsExactly("E", "B", "C", "D");
ご覧のとおり、元の配列も変更されています。 リストと配列の両方に、まったく同じ要素が同じ順序で含まれるようになりました。
stringListに新しい要素を挿入してみましょう。
stringList.add("F");
java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
ご覧のとおり、リストへの要素の追加/リストからの要素の削除は、java.lang.UnsupportedOperationException。をスローします。
3. ArrayList(Arrays.asList(array))
に似ています Arrays.asList 方法、 配列からリストを作成する必要がある場合は、ArrayList <>(Arrays.asList(array))を使用できます 。
ただし、前の例とは異なり、これはアレイの独立したコピーです。つまり、新しいリストを変更しても元のアレイには影響しません。 さらに、要素の追加や削除など、通常のArrayListののすべての機能があります。
String[] stringArray = new String[] { "A", "B", "C", "D" };
List stringList = new ArrayList<>(Arrays.asList(stringArray));
次に、stringListの最初の要素を変更しましょう。
stringList.set(0, "E");
assertThat(stringList).containsExactly("E", "B", "C", "D");
そして今、私たちの元の配列で何が起こったのか見てみましょう:
assertThat(stringArray).containsExactly("A", "B", "C", "D");
ご覧のとおり、元のアレイは変更されていません。
まとめる前に、 JDKソースコードを見ると、Arrays.asListメソッドがArrayListとは異なるタイプを返すことがわかります。 java.util.ArrayList。 主な違いは、返される ArrayList は既存の配列のみをラップすることです。つまり、addメソッドとremoveメソッドを実装していません。
4. 結論
この短い記事では、配列をArrayListに変換する2つの方法の違いを見ていきました。 これらの2つのオプションの動作と、内部配列の実装方法の違いを確認しました。
いつものように、コードサンプルはGitHubのにあります。