1. ホーム
  2. java

[解決済み] Collections.emptyMap() vs new HashMap()

2022-04-28 11:08:40

質問

を使用する場面にはどのようなものがありますか? Collections.emptyMap() ? ドキュメントには、コレクションをイミュータブルにしたい場合にこのメソッドを使用することができると書かれています。

なぜ、不変の空のコレクションが必要なのでしょうか?何が言いたいの?

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

から 効果的なJava , 項目番号43 - "Return empty arrays or collections, not null" は空のコレクションを返すことを示し、さらにこれらの emptyList() , emptySet() および emptyMap() メソッドを使って、空のコレクションを取得します。このコレクションは、イミュータブルであるという利点もあります。より 項目番号 15 "Minimize Mutability" .

から コレクション-emptySet-Collections-emptyList-Collections

プログラミングのイディオムの一種です。これは、NULL変数を必要としない人たちのためのものです。つまり、集合が初期化される前に、空の集合を使うことができるのです。

注意してください。 以下のコードは単なる例です(あなたの使用状況に応じて変更してください)。

private Set myset = Collections.emptySet();

void initSet() {
   myset = new HashSet();
}
void deleteSet() {
   myset = Collections.emptySet();
}

これらの方法には、いくつかの利点があります。

  1. コレクションの総型を明示的にタイプアウトする必要がないため、より簡潔です。一般的には、メソッド呼び出しのコンテキストから推測されます。

  2. 新しいオブジェクトをわざわざ作成する必要がなく、既存の空で不変のオブジェクトを再利用するだけなので、より効率的です。この効果は一般的には非常に小さいものですが、たまに(いや、めったに)重要なことがあります。