Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最快的集合包含5-10个整数的方法_Java_Performance_Collections - Fatal编程技术网

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

Java 最快的集合包含5-10个整数的方法,java,performance,collections,Java,Performance,Collections,我有一个小问题:我有一个5-10个整数的集合。他们没有改变或其他任何事情,但他们一直在那里。因此,我的问题是,对于contains方法,哪个集合最好/最快:ArrayList、LinkedList、Vector、HashSet还是…?由于计算机加载数据的方式(CPU优化假设您将使用相邻的内存地址) 在这里,使用小型阵列可能是最快的解决方案 如果实际数字很小,Java将优化整数(非原语),因此使用ArrayList应该产生与使用int[]类似的结果。 如果使用较大的数字(不是-128到127之间)

我有一个小问题:我有一个5-10个整数的集合。他们没有改变或其他任何事情,但他们一直在那里。因此,我的问题是,对于contains方法,哪个集合最好/最快:ArrayList、LinkedList、Vector、HashSet还是…?

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

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

使用哈希集的开销可能比在int[]数组上实际运行5-10比较要高

<>你可能想考虑把这些数字放进一系列IF条件。

只有每秒至少运行100000次这些比较,以上所有内容才会产生影响。没有比这更重要的了,这真的不重要

总结:

代码我敢打赌,如果您想花费一些不可忽略的时间创建集合,那么通过以下方式可以获得最佳结果。有一些计算这种散列的通用方法,但在您的例子中,由于它们的固定开销,它们可能不如简单的数组扫描

<>在创建时间不重要的情况下,考虑一个类似于此的算法,其中表达式

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

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

只有5-10个整数,我认为无论你是否使用这两个整数,你的性能都不会受到影响。你的集合太小,无法产生任何差异。但是如果你想了解自己,这里是一个很好的参考。事实上,在国际海事组织(我要逆势而行)如果收集被大量使用,那么是的,有一个(大)区别。例如,让我们想象一下,解析器中的一组局部变量(仅选取一个教科书示例)。通常情况下,这种高度优化的集合并不存在,除非一般需求与您的场景相匹配(是的,在这种情况下,HashSet很好,但它不是最佳的)。假设你真的需要它:如何搜索?多久?有什么有价值的搜索模式吗?是否有一个(或多个)元素的搜索频率高于其他元素?这是动态的还是静态的?我认为这是一个很好的答案,它符合我的直觉。但是,除非你测量,否则你真的不会知道。@Sjlver抱歉,但我认为这是一个“标准”答案。一般来说,这是正确的,但是(当然假设OP真的需要这个小优化),它太通用了,没有用处。数组比哈希集快吗?也许,如果搜索最多的元素总是最后一个呢?数组/哈希集是一个不错的选择吗?也许,我们不知道根据哪个标准集合进行搜索,那么我们无法回答。有什么有用的先决条件吗?例如:集合包含从0到(相对较小)N的整数。在这种情况下,位数组的速度更快。等等(国际海事组织)。