2

これら 2 つの初期化スタイルの違いは何ですか。

List<String> list = new ArrayList<String>(Arrays.asList(arr));

List<String> list = Arrays.asList(arr);

私が理解できることの 1 つは、後者の場合、ArrayListクラスを使用していないということです。では、ここでどのクラスのオブジェクト (リスト) を作成するのでしょうか?

4

4 に答える 4

8

1 つ目は mutable を作成しList、2 つ目は固定サイズです。ArrayListの唯一の実装ではありませんListArrays.asList固定サイズの独自の実装を返します。つまり、個々の要素を更新できますが、要素を追加または削除することはできません。

于 2013-05-09T16:23:44.127 に答える
2

私が見る唯一の違いは、この秒が不変Listオブジェクトを作成することです。

于 2013-05-09T16:23:00.060 に答える
1

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.

于 2013-05-09T16:33:32.210 に答える
0

最初に、リストを返す静的メソッドasListにリストarrを渡し、メソッドの結果をコンストラクタ引数として新しい ArrayList を作成します。

2 つ目は、静的メソッドの結果をオブジェクトとして直接使用します。

于 2013-05-09T16:25:02.963 に答える