如果我对Oracle数据库进行类比:它们具有“索引”和“提示”概念,以加速执行查询。所以我想对Java
进行类比:是否可以快速执行contains
的“collection
”方法?
答案 0 :(得分:4)
是否可以执行"包含"集合的方法要快?
是的,使用更快contains
方法的集合。
e.g。
HashSet -> O(1)
SortedSet -> O(ln N)
List -> O(N)
大O时间复杂度表明操作的最坏情况时间随着集合大小的增长而变化。对于适度到大型集合,较低的时间复杂度更快。
注意:这只会告诉您收集如何缩放。如果集合非常小,如1或2,则List可能是最快的。
Big-O
符号得到了很好的解释What is a plain English explanation of "Big O" notation?
答案 1 :(得分:1)
这取决于你想对该系列做什么。这些是标准选项:
HashSet
。设置Set
后,contains()
方法将在O(常量)时间内运行。LinkedHashSet
。它与HashSet
几乎相同,但它在Set的顶部保留了LinkedList
,因此您可以保持原始插入的顺序。contains()
方法将在O(log n)时间内返回,这仍然相当快。如果这些都不适合你,那么你可以拥有你的收藏,分配另一个HashSet
并将它们保持在一起。但是,我担心在大多数情况下,性能提升是不合理的。