2017-04-19 5 views
2

私の質問は簡単です。 SingletonImmutableBiMapとはguavaで、singletonbiなどのキーワードが含まれているのはなぜですか?グアバからのSingletonImmutableBiMapとは

ImmutableMapの意味は明らかですが、他の2つのキーワードの目的は何ですか?

いつこの実装を使用しますか?ちょうど1の要素が含まれています。私は

.stream().collect(ImmutableMap.toImmutableMap(ConfigItem::getId, Function.identity()))

答えて

5

Singletonを呼び出すことによって、このクラスに気づきました。不変コレクションのために、その大きさは変わりませんので、あなたは、空、単一要素またはその他の小さなコレクションの別の実装を持つことができます。一般的な実装よりもメモリが大幅に少なく、より高速に実行できるので便利です。例えば。 EmptyMap のメソッドは、複雑なハッシュテーブルルックアップロジックではなく、ちょうどreturn falseになります。

Bi:双方向です。つまり、値によってキーだけでなく値によっても取得できます。 https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/BiMap.htmlを参照してください。

いつこの実装を使用しますか?

決して、それはパブリックではありませんので。その存在は内部の詳細です。ここで使用

4

実際のクラスでは、実装の詳細であり、あなたはそれを心配すべきではありません。

SingletonImmutableBiMapこれは、1つの要素を含むストリームを収集するときに作成されるImmutableMapのインスタンスです。この場合のマップはBiMapです。すべてのキーと値の両方が一意であるためです。グアバは、MapBiMapの両方の場合にSingletonImmutableBiMapを再利用して、合計クラス数を最適化します。

EDIT:

ところであなたはおそらくここMaps.uniqueIndexを使用することができます。

Map<Integer, ConfigItem> m = Maps.uniqueIndex(configItems, ConfigItem::getId); 
関連する問題