2017-04-19 110 views
2

我的问题很简单。什么是guavaSingletonImmutableBiMap,为什么它包含了诸如singletonbi关键字?什么是来自番石榴的SingletonImmutableBiMap

这是非常清楚的ImmutableMap手段,但什么是其他两个关键字的目的是什么?

我们什么时候使用这个实现?我通过调用

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

回答

5

Singleton注意到这个类:只包含1元。对于不可变集合,它们的大小不会改变,因此您可以为空单元素或其他小集合单独实现。这很有用,因为它们比一般实现需要更少的内存,并且可以更快地执行。例如。对于EmptyMapcontains方法可以只是return false而不是复杂的散列表查找逻辑。

Bi:双向的,即你可以通过数值键以及由键值。请参阅https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/BiMap.html

我们什么时候使用这个实现?

从来没有,因为它是不公开的。它的存在是一个内部细节。

4

这里使用的实际类是一个实现细节,你不应该担心它。

SingletonImmutableBiMap这是在收集包含一个元素的流时创建的ImmutableMap的实例。这种情况下的地图也是BiMap,因为所有关键字和值都是唯一的。对于MapBiMap这两种情况,Guava通过重新使用SingletonImmutableBiMap来优化总课数。

编辑:

BTW你或许可以在这里使用Maps.uniqueIndex

Map<Integer, ConfigItem> m = Maps.uniqueIndex(configItems, ConfigItem::getId);