自从Maps
接触 Java 以来,我一直在广泛使用它们。尤其HashMap
是许多场景的绝佳选择。似乎它ArrayList
在每个类别中都胜过一个 - 有人说迭代是不可预测的,但为此我们有LinkedHashMap
.
所以,我的问题是:HashMap
如果我们有一个可靠的不可变密钥,为什么不一直使用 a 呢?
此外,对于非常少量(<10)的项目使用类似 a 是否合适,HashMap
或者是否有一些我不考虑的额外开销?
自从Maps
接触 Java 以来,我一直在广泛使用它们。尤其HashMap
是许多场景的绝佳选择。似乎它ArrayList
在每个类别中都胜过一个 - 有人说迭代是不可预测的,但为此我们有LinkedHashMap
.
所以,我的问题是:HashMap
如果我们有一个可靠的不可变密钥,为什么不一直使用 a 呢?
此外,对于非常少量(<10)的项目使用类似 a 是否合适,HashMap
或者是否有一些我不考虑的额外开销?
ArrayList
当您的键是连续整数时使用。(如果它们不是基于 0,只需使用偏移量。)访问(特别是随机访问)和更新效率更高。否则,当然,HashMap
(或者,正如你所说,LinkedHashMap
)是非常有用的数据结构。
我相信 a 的默认初始大小HashMap
是 16 个存储桶,因此对于非常小的列表会有一些开销。但是,除非您要创建大量地图,否则它不应该成为您编码的一个因素。
与数组(或 ArrayList)相比,HashMap 的开销很大:
这些都是很小的,所以你可以一直使用 HashMaps (事实上,这就是 PHP 似乎做的),但是当你真的不需要它时使用 HashMap 是浪费的。
比较可能会有所帮助:你可以用整数做任何事情,你也可以用字符串做任何事情,那么为什么我们有整数呢?因为它们更小,使用起来更快(并提供了一些很好的保证,比如它们总是包含一个数字)。
我一直在使用地图——它是最强大和最通用的数据结构之一。我主要使用 LinkedHashMap,但是当使用字符串作为键时,我使用 TreeMap,因为对键进行排序有额外的好处。
然而:
请记住——Java 为您提供了非常强大的集合(Set、Map、List),并且对于每一个集合,具有不同特性的多个实现——它们的存在是有原因的。
每个数据结构都有其用途,即使许多可以使用地图作为后端来实现,最合适的数据结构......更合适(并且通常更有效,开销更少并提供更多功能)
大小无关紧要 - 5 或 500 个元素,如果它看起来像地图,请使用地图(可能很少有例外和极端情况,您需要最大效率并且硬编码值更好)。但如果它看起来像一套 - 使用一套!