2017-04-19 39 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);