我是Guava的贡献者。
对于基于哈希(和枚举)的所有集合,单条目操作的时间为常数时间,正如您所期望的那样。 (HashMultiset
, LinkedHashMultiset
, ConcurrentHashMultiset
, HashBiMap
, HashBasedTable
, ImmutableSet
, ImmutableMap
, EnumMultiset
, EnumBiMap
等都属于这个类别。) 所有基于树/排序的集合在其单条目操作方面具有对数时间,包括TreeMultiset
, ImmutableSortedMap
, 和 ImmutableSortedSet
。
在多重映射中,文档基本上告诉您Map
和值集合实现方式,您可以从中了解到更多信息。 HashMultimap
基本上是HashMap
到HashSet
的映射,LinkedHashMultimap
是LinkedHashMap
到LinkedHashSet
的映射,ArrayListMultimap
是HashMap
到ArrayList
的映射,LinkedListMultimap
是LinkedHashMap
到LinkedList
的映射(从性能上讲,如果不能严格正确)。TreeMultimap
是一个TreeMap
到TreeSet
的映射,ImmutableSetMultimap
是一个ImmutableMap
到ImmutableSet
的映射,ImmutableListMultimap
是一个ImmutableMap
到ImmutableList
的映射。
唯一可能不太明显的是,SortedMultiset
的实现提供了 subMultiset().size()
操作,时间复杂度为 O(log n)
,而您无法仅使用 JDK 的 TreeMap<E, Integer>
实现此操作。
所有集合的视图(我们非常喜欢视图)都在常数时间内返回,并具有您所期望的渐近复杂度。
您是否还有其他特定的问题?
总的来说,Guava 基本上是 Google 在生产中使用的核心库,我认为这是相当有力的证据,表明这些工具在高负载环境下表现良好。此外,Guava 不断改进,您基本上可以免费获得这些改进。