1. ホーム

[解決済み】Collections.emptyList()とnewインスタンスの比較

2022-04-17 13:05:08

質問

のように空のリストを返した方が良いのでしょうか? これ :

return Collections.emptyList();

または、次のように これ :

return new ArrayList<Foo>();

それとも、返されたリストで何をするかに完全に依存しているのでしょうか?

どのように解決するのですか?

主な違いは Collections.emptyList() 不変 リスト、つまり要素を追加することができないリストです。(同じことが List.of() Java 9で導入された)

稀なケースとして する は、返されたリストを修正したいと思います。 Collections.emptyList()List.of() はこのように ではない は良い選択だと思います。

契約(ドキュメント)に明示的に異なる記載がない限り、イミュータブルリストを返すことは全く問題ありません(望ましい方法であるとさえ言えます)。


おまけ emptyList() は、呼び出しのたびに新しいオブジェクトを作成しないかもしれません。

このメソッドの実装では、呼び出しごとに個別のリストオブジェクトを作成する必要はありません。このメソッドを使用すると、同名のフィールドを使用するのと同等のコストが発生する可能性があります。(このメソッドとは異なり、このフィールドは型安全性を提供しません)。

の実装は emptyList は次のようになります。

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

そのため、(空のリストを返す)メソッドが頻繁に呼び出される場合は、この方法の方がCPUとメモリの両方で若干パフォーマンスが良くなる可能性があります。