【发布时间】:2020-05-26 00:55:10
【问题描述】:
我想知道 Hashmap 和 ArrayList 中的搜索元素之间是否有任何比较。我遇到的情况如下:我将有少量元素(通常 4-6 可能最多 10)。我有这样的元素的整数 Id,我会得到很多调用,这些调用将使用 id 搜索元素并在这个元素上执行一些方法。 它看起来像是 hashmap 的好用例,但是我开始怀疑像 ArrayList 这样的线性集合在这里是否会更好。例如因为 CPU 缓存。而且要在地图上使用搜索,我需要自动装箱以从原始创建整数。 问题是对于这种情况,更好的是对原始整数进行线性搜索和比较,还是坚持使用 hashmap?
【问题讨论】:
-
如果你只有10个元素,用什么都没关系
-
获得与您的案例相关的结果的最佳方法是自己进行测试。话虽如此,最多 10 个 元素是相对较少的元素。除非您多次搜索这 10 个元素。
-
正如我所提到的,会有很多人要求它。这就是为什么我正在搜索任何资源以进行此类测试。我可以做一些简单的时间测量,但在整个系统中它的行为可能会有所不同。这就是为什么我要问是否有任何针对 Java 的分析。我很确定我看到了有关 C++ 集合的此类讨论。 @Aleksandr 所以在您看来,如果我需要进行 200-300k 搜索自动装箱不是问题?
-
@TheTosters 您应该提供两个预期用例的代码 sn-p。还有 30 万次搜索需要多少时间?尽早?在一分钟内?此外,您问这个是因为遇到瓶颈还是出于好奇?
-
@Aleksandr 一个不适合 CPU 缓存的对象是相当不寻常的,但无论如何,CPU 缓存不会加载整个对象,而只会加载实际访问数据的缓存行。对于小对象,这甚至可能会影响不属于该对象的内存……
标签: java performance arraylist collections hashmap