Guava库的性能如何?

13

我研究了Google Guava库,并且发现其中有很多好用的数据结构。

如果有其他人使用过它,您能否提供反馈,说明在处理大型数据集时其性能如何?基本上,我正在寻找其操作的BigO符号。

先行致谢。


2
你具体是在寻找哪种操作的性能? - Jean Logeart
3
Guava库很大。你特别想了解哪些操作? - Perception
1
提供新集合(MultiSet、Multimap、BiMap、Table)操作的图表将是很好的。就像在Java集合中一样,使用BigO符号 - user1447357
1个回答

39

我是Guava的贡献者。

对于基于哈希(和枚举)的所有集合,单条目操作的时间为常数时间,正如您所期望的那样。 (HashMultiset, LinkedHashMultiset, ConcurrentHashMultiset, HashBiMap, HashBasedTable, ImmutableSet, ImmutableMap, EnumMultiset, EnumBiMap等都属于这个类别。) 所有基于树/排序的集合在其单条目操作方面具有对数时间,包括TreeMultiset, ImmutableSortedMap, 和 ImmutableSortedSet

在多重映射中,文档基本上告诉您Map和值集合实现方式,您可以从中了解到更多信息。 HashMultimap基本上是HashMapHashSet的映射,LinkedHashMultimapLinkedHashMapLinkedHashSet的映射,ArrayListMultimapHashMapArrayList的映射,LinkedListMultimapLinkedHashMapLinkedList的映射(从性能上讲,如果不能严格正确)。TreeMultimap是一个TreeMapTreeSet的映射,ImmutableSetMultimap是一个ImmutableMapImmutableSet的映射,ImmutableListMultimap是一个ImmutableMapImmutableList的映射。

唯一可能不太明显的是,SortedMultiset 的实现提供了 subMultiset().size() 操作,时间复杂度为 O(log n),而您无法仅使用 JDK 的 TreeMap<E, Integer> 实现此操作。

所有集合的视图(我们非常喜欢视图)都在常数时间内返回,并具有您所期望的渐近复杂度。

您是否还有其他特定的问题?

总的来说,Guava 基本上是 Google 在生产中使用的核心库,我认为这是相当有力的证据,表明这些工具在高负载环境下表现良好。此外,Guava 不断改进,您基本上可以免费获得这些改进。


1
Sumit,请查看不可变集合新的集合类型以获取更好的表格,说明哪种类型由什么支持。 - Petr Janeček
1
嗯,我的意思是...这些都不应该是“令人惊讶”的。当然,Guava的优先事项之一就是确保这些事情没有任何意外... - Louis Wasserman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接