Guava contributor here.
Um, what's there to say? All hash-based (and enum-based) collections have the single-entry operations in constant time, exactly as you'd expect. (HashMultiset
, LinkedHashMultiset
, ConcurrentHashMultiset
, HashBiMap
, HashBasedTable
, ImmutableSet
, ImmutableMap
, EnumMultiset
, EnumBiMap
, etc. all fall into that category.) All tree-based/sorted collections have logarithmic time for their single-entry operations, including TreeMultiset
, ImmutableSortedMap
, and ImmutableSortedSet
.
Among multimaps, well, the documentation basically tells you the Map
and the value-collection implementations, and you can figure it out from there. HashMultimap
is basically a HashMap
to HashSet
s, LinkedHashMultimap
is a LinkedHashMap
to LinkedHashSet
s, ArrayListMultimap
is a HashMap
to ArrayList
s, LinkedListMultimap
is a LinkedHashMap
to LinkedList
s (performance-wise, if not technically true), TreeMultimap
is a TreeMap
to TreeSet
s, ImmutableSetMultimap
is an ImmutableMap
to ImmutableSet
s, ImmutableListMultimap
is an ImmutableMap
to ImmutableList
s.
The only thing that might not be self-evident is probably that the SortedMultiset
implementations provide subMultiset().size()
operations in O(log n)
time, which you couldn't do just with a JDK TreeMap<E, Integer>
.
All the views of collections (we like views a lot) return in constant time and have the asymptotics you'd expect.
Is there anything more specific you were concerned about?
(In general, Guava is basically the core libraries Google uses in production, which I'd like to think is pretty strong evidence that the utilities perform satisfactorily in heavy-duty environments. Additionally, Guava is constantly being improved, and you get those improvements basically for free.)