我浏览了Google Guava库,并在其中发现了许多好的、可用的数据结构。
如果其他人使用过它,那么您能否就它在处理大量数据集时的表现提供反馈?基本上我正在为其操作寻找 BigO 符号。
提前致谢
番石榴贡献者在这里。
嗯,有什么好说的?所有基于散列(和基于枚举)的集合在恒定时间内都具有单项操作,正如您所期望的那样。(HashMultiset
, LinkedHashMultiset
, ConcurrentHashMultiset
, HashBiMap
, HashBasedTable
, ImmutableSet
, ImmutableMap
, EnumMultiset
,EnumBiMap
等都属于该类别。)所有基于树的/排序的集合都有其单项操作的对数时间,包括TreeMultiset
,ImmutableSortedMap
和ImmutableSortedSet
.
在 multimaps 中,文档基本上告诉你Map
值集合的实现,你可以从那里弄清楚。 HashMultimap
is 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(性能方面,如果技术上不正确),TreeMultimap
is a TreeMap
to TreeSet
s,ImmutableSetMultimap
is an ImmutableMap
to ImmutableSet
s,ImmutableListMultimap
is an ImmutableMap
to ImmutableList
s。
唯一不言自明的可能是SortedMultiset
实现提供subMultiset().size()
了及时的操作O(log n)
,而仅使用 JDK 是无法做到的TreeMap<E, Integer>
。
集合的所有视图(我们非常喜欢视图)都会在恒定时间内返回并具有您期望的渐近线。
你有什么更具体的担忧吗?
(总的来说,Guava 基本上是 Google 在生产中使用的核心库,我想这是强有力的证据,证明这些实用程序在重型环境中表现令人满意。此外,Guava 一直在改进,你会得到这些改进基本上是免费的。)