2012-01-14 9 views
17

私はMultisetについてよく理解していますが、頻繁にMapを使用して周波数を表現することはできますが、Multisetを使用する理由はありますか? Multiset<E>Map<E, Integer>以上のGuava MultiSetとマップの比較

答えて

31

利点:

  • コレクションになっていない要素を追加するときに必要ありません特別なコード。
  • 要素数を直接処理する方法:count(E)add(E, int)など
  • コードの意図は明確です。 は明らかに要素をカウントにマップします。 Map<E, Integer>は要素を任意の整数にマップできます。

も参照してください:私に

Multiset Javadoc

Multiset explained in the Guava Wiki

+5

Multisetはおそらくあなたの実装よりも効率的であるだけでなく、実際に何をしようとしているのかを明確にしています。通常、マップを使用すると、キーがマップ内にあるかどうかを確認したり、ゼロを扱ったり、あらゆる種類のトリッキーなビジネスを扱っています。マルチセットはうまく動作します。 –

8

Mapから離れてMultisetを設定し、最も重要な点は、それがCollectionだということです。あなたはそれにものを入れて、後でカウントを得ることができます。それは、Mapがそうでないところでそれが設計されているユースケースに概念的に適合しています。これらのユースケースの場合、MapはJavaがより適切なものを提供しなかったのでちょっとしたことがOKのハックです。

関連する問題