如何加速收集“包含”执行计划?

时间:2017-06-07 08:53:41

标签: java

如果我对Oracle数据库进行类比:它们具有“索引”和“提示”概念,以加速执行查询。所以我想对Java进行类比:是否可以快速执行contains的“collection”方法?

2 个答案:

答案 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)

这取决于你想对该系列做什么。这些是标准选项:

  1. 如果插入顺序无关紧要,那么您可以使用HashSet。设置Set后,contains()方法将在O(常量)时间内运行。
  2. 或者,您可以使用LinkedHashSet。它与HashSet几乎相同,但它在Set的顶部保留了LinkedList,因此您可以保持原始插入的顺序。
  3. 如果您想维护商品的自然订购,可以使用 TreeSet 。它的contains()方法将在O(log n)时间内返回,这仍然相当快。
  4. 如果这些都不适合你,那么你可以拥有你的收藏,分配另一个HashSet并将它们保持在一起。但是,我担心在大多数情况下,性能提升是不合理的。