最快的集合包含5-10整数的方法

时间:2014-11-11 19:29:51

标签: java performance collections

我有一个小问题:我有一个5-10整数的集合。他们不会改变或其他任何东西,但他们一直在那里。所以我的问题哪个Collection对于contains方法来说是最好的/最快的:ArrayList,LinkedList,Vector,HashSet还是......?

2 个答案:

答案 0 :(得分:1)

由于计算机加载数据的方式(CPU优化假设您将使用相邻的内存地址) 使用小型数组可能是最快的解决方案。

如果实际数字将是小数字,Java将优化Integer(非原语),因此使用ArrayList应该产生与使用int []类似的结果。
如果使用较大的数字(不在-128到127之间),int []数组将产生更好的结果。

使用Hashset的开销可能会花费更多,然后在int []数组上实际运行5-10个比较。

您可能需要考虑将这些数字放入一系列IF条件中。

如果您运行这些比较,则只会产生影响,每秒至少100,000次。除此之外,它并不重要。

总结:
代码<< int [] array<< ArrayList<< HashSet的

答案 1 :(得分:1)

我敢打赌,通过perfect hashing可以获得最佳效果,假设您想花费一些不可忽视的时间来创建该集合。有一些计算这种散列的一般方法,但在你的情况下,由于它们的固定开销,它们可能不如简单的阵列扫描。

如果创建时间无关紧要,请考虑此answer of mine中的算法,其中表达式为

TABLE[(MULTIPLIER * c) >> SHIFT] == c

用于测试集合中是否包含c。找到合适的MULTIPLIER需要一些时间,但测试速度非常快。