Assume a potentially multi-threaded environment. I want to use a map along with (value) caching. Why would I prefer one of
collection.immutable.Map.empty[ K, SoftReference[ V ]]
new com.google.common.collect.MapMaker.softValues.makeMap[ K, V ]
over the other? The map is going to be stored in an STM ref, so immutable would be straight forward and fine. Furthermore, K
is most likely going to be Long
, so I could use collection.immutable.LongMap
.
What would be the advantage of using google collections here? Performance and space wise?
IMO the major advantage of Google's approach is the resulting API is cleaner, i.e. the SoftReference
s are inserted and null-checked for you, rather than your needing to manage them. But the guaranteed immutability and native Scala API are marks in the other column.
I'd be inclined to experiment with writing a mixin (similar to the MultiMap
we already have in the standard library, which is unfortunately mutable).