我有一个小问题:我有一个5-10整数的集合。他们不会改变或其他任何东西,但他们一直在那里。所以我的问题哪个Collection对于contains方法来说是最好的/最快的:ArrayList,LinkedList,Vector,HashSet还是......?
答案 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
需要一些时间,但测试速度非常快。