我有一个小问题:我有一个包含5-10个整数的集合。它们不会改变,也不会做任何其他事情,但它们仍然存在。所以我的问题是哪个集合对于contains方法是最好的/最快的: ArrayList,LinkedList,Vector,HashSet还是...?
发布于 2014-11-12 04:04:30
由于计算机加载数据的方式(CPU优化假设您将使用相邻的内存地址)
如果实际的数字将是小数字,Java将优化整数(非原语),因此使用ArrayList应该会产生与使用int[]类似的结果。
如果使用较大的数字(不在-128到127之间),则int[]数组将产生更好的结果。
与在int[]阵列上实际运行5-10相比,使用哈希集的开销可能会更高。
只有在每秒运行这些比较至少100,000次的情况下,以上所有操作才会产生影响。比这还少的任何东西,都无关紧要。
总结一下:
Code << int[]数组<< ArrayList << HashSet
发布于 2014-11-12 10:33:00
我敢打赌,如果你想花一些不可忽略的时间来创建集合,那么通过perfect hashing可以获得最好的结果。有一些计算这种散列的通用方法,但在您的例子中,由于它们的固定开销,它们可能不如简单的数组扫描。
在创建时间无关紧要的情况下,考虑如下answer of mine中的算法,其中
TABLE[(MULTIPLIER * c) >> SHIFT] == c用于测试c是否包含在集合中。找到合适的MULTIPLIER需要一些时间,但测试速度非常快。
https://stackoverflow.com/questions/26872951
复制相似问题