以前可能有人问过,但我一次又一次地遇到这种情况,我想存储一小部分属性,我绝对确定永远不会超过 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/