15

機能するオブジェクトを含むコードがいくつかMap<String, Map<String, String>>あります (HashMap の HashMap としてインスタンス化されます) が、Guava でこのデータ構造を表現するより良い方法があるかどうか疑問に思います。

を検討Multimapしましたが、グアバにはListMultimapありSetMultimapますが、「MapMultimap」は見つかりませんでした。

私はTableもチェックしましたが、これはそれに似ているようですが、その名前は私を不快にさせています.私が持っているのは間違いなくテーブルではなくツリーです. (2 番目のキー間に重複はありません)

より良いグアバの代替品はありますか、それとも固執する必要がありMap<String, Map<String, String>>ますか?

4

2 に答える 2

23

Tableあなたのニーズによく合っているようです。ただし、適切な実装を選択するようにしてください。特に、2番目のキー(テーブルの列)がすべて異なる場合、結果のテーブルはまばらになり、メモリ使用量を管理するためにそれを考慮に入れる必要があります。

したがって、ArrayTableは避ける必要がありますが、他の実装はどれでも使用できます。ドキュメントには、より疎でより高密度のデータセットの実装が最適化されていることが記載されていることに注意してください。ImmutableTable

Tableを一度に構築する場合はImmutableTable.Builder、この最適化を使用してその恩恵を受けるだけでなく、テーブルが複数のスレッド間で共有されている場合は生活を簡素化できます。

于 2013-02-01T11:53:09.277 に答える
11

Guava のTableインターフェースを見てみましょう。

そのドキュメントの例は、ユースケースとかなり重複しているようです:

通常、一度に複数のキーのインデックスを作成しようとすると、Map<FirstName, Map<LastName, Person>> のようなものになってしまい、見苦しく使いにくいものになります。Guava は、新しいコレクション タイプ テーブルを提供します。これは、任意の「行」タイプおよび「列」タイプのこのユース ケースをサポートします。

于 2013-02-01T11:47:44.297 に答える