これら 2 つの初期化スタイルの違いは何ですか。
List<String> list = new ArrayList<String>(Arrays.asList(arr));
と
List<String> list = Arrays.asList(arr);
私が理解できることの 1 つは、後者の場合、ArrayList
クラスを使用していないということです。では、ここでどのクラスのオブジェクト (リスト) を作成するのでしょうか?
これら 2 つの初期化スタイルの違いは何ですか。
List<String> list = new ArrayList<String>(Arrays.asList(arr));
と
List<String> list = Arrays.asList(arr);
私が理解できることの 1 つは、後者の場合、ArrayList
クラスを使用していないということです。では、ここでどのクラスのオブジェクト (リスト) を作成するのでしょうか?
1 つ目は mutable を作成しList
、2 つ目は固定サイズです。ArrayList
の唯一の実装ではありませんList
。Arrays.asList
固定サイズの独自の実装を返します。つまり、個々の要素を更新できますが、要素を追加または削除することはできません。
私が見る唯一の違いは、この秒が不変List
オブジェクトを作成することです。
In List<String> list = Arrays.asList(arr);
Arrays.asList(arr)
return a fixed-size list backed by the arr
array of String type. It doesn’t implement the add or remove method (as it says in the specs is fixed size list).
So if you are trying to add something like these
list.add("StackOverflow")
You will be getting an UnsupportedOperationException (Thrown to indicate that the requested operation is not supported.) because the returned list is of fix size.
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/UnsupportedOperationException.html
In List<String> list = new ArrayList<String>(Arrays.asList(arr));
new ArrayList<String>(Arrays.asList(arr))
returns a list containing the elements of the fixed-size list backed by the arr
array of String type, in the order they are returned by the collection's iterator.
So here if you are trying to add something like these
list.add("StackOverflow")
Then it will be getting added that's the difference.
最初に、リストを返す静的メソッドasListにリストarrを渡し、メソッドの結果をコンストラクタ引数として新しい ArrayList を作成します。
2 つ目は、静的メソッドの結果をオブジェクトとして直接使用します。