java - 没有明确答案 : Which Java Map is the cheapest?

标签 java performance dictionary key

以前可能有人问过,但我一次又一次地遇到这种情况,我想存储一小部分属性,我绝对确定永远不会超过 20 个键。使用 HashMap 似乎完全浪费了 CPU 和内存,而且一开始就需要所有开销,而且为每个键查找计算高级哈希值的性能也很差。如果只有 <20 个键(大多数时候可能是 5 个)。我绝对确定计算哈希值比仅仅迭代和比较花费的时间多数百倍......不是吗?

有人谈论过早优化,但我并不完全同意。我主要使用 Android,任何额外的 CPU/内存都会选择更多的资源来处理其他东西。这里不一定谈论消费市场。此外,这里的用例定义非常明确,并且没有太大变化;如果突然出现大量新键(这种情况永远不会发生),用 HashMap 替换非常便宜的映射是微不足道的。

所以,我的问题是;这是我可以在 Java 中使用的最便宜、最基本的 map ?

最佳答案

致所有第一段:不!不会有显着的内存开销,因为据我所知,HashMap 是用 16 个存储桶初始化的,然后每次重新散列时其大小都会加倍,因此在最坏的情况下,您的 map 将有 12 个超出的存储桶,所以这没什么大不了的。

关于查找时间,它是常数,相当于访问数组元素的时间,这总是比循环 O(n) 个元素更好(即使 n < 20) 。 HashMap 的唯一背景是它是未排序的,但就我而言,当我对订单。

总结:使用HashMap!

关于java - 没有明确答案 : Which Java Map is the cheapest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684954/

相关文章:

ios - 在 Swift 的几个字典中访问一个键的值

iphone - 我们可以为 iOS map 导航应用程序集成 Microsoft MapPoint 服务吗?

java - 如何使用 Apache POI 加载大型 xlsx 文件?

java - Jasper Report 在 Excel 文件中多次打印同一份报告

java - JNI 将字符串从 C 传递到 java

performance - 为什么计时器显示的内容如此违反直觉?

ruby - 使用 Sorbet 的 ruby​​ 类型检查器会对 ruby​​ 应用程序的性能产生影响吗?

java - 如何提高 java 应用程序从 oracle 数据库中获取大数据的性能?

java - Spring 框架 : No BeanFactory available anymore (probably due to serialization)

python - Apache 光束 + Python : Writing JSON (or dictionaries) strings to output file