2016-05-20 4 views
2

、私は空リスト:Arrays.asList()とCollections.emptyList()の違いは何ですか?私は空のリストが必要な場合は

Arrays.asList() 

または

Collections.emptyList() 

を使用することができ、これらの二つの呼び出しの違いは何ですか?どちらを使うべきですか?

+0

2番目のものを使用してください。最初のものは、配列の内容からリストを作成するためのものです。新しい空リストを作成するには、これを使用するのが面倒です。 – Berger

+0

あなたがどこかにいくつかの項目を追加する必要がある場合は、新しいArrayListのインスタンス '新しいのArrayListを<>(使用する必要がありますので、' Collections.emptyListは() '、不変のリストを返します)' –

+1

[あなたは、これがアウトポストをチェックする必要があります)](HTTP ://stackoverflow.com/questions/5552258/collections-emptylist-vs-new-instance) – s0re

答えて

3

Collections.emptyList()は、Arrays.asList()のように新しいオブジェクトを作成するのではなく、オブジェクトを再利用するため、最適なオプションです。

NB:Collections.emptyList()あなたのコードの後半でそれを変更する場合、それはあまりにも不変であるとして、あなたがArrays.asList()と同じ問題に直面することになるので、あなたが明示的に代わりにあなたのリストを作成する必要がありますので、不変オブジェクトを返します。

+0

良い点@Nicolas –

+1

'Arrays.asList()'も事実上不変です。バッキング配列のサイズを変更できないため、何も追加または削除できません。 –

+1

さらに、 'Collections.emptyList()'がオブジェクトを再利用することは必ずしも真実ではありません。 [Javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyList()): "このメソッドの実装では、**個別のリストを作成する必要はありません。それぞれの呼び出しのためのオブジェクト "であり、それは*可能であることを意味する。しかし、 'Collections.emptyList()'は 'Arrays.asList()'より多くのインスタンスを生成することはないので、より良い選択であると私は同意します。 –

関連する問題