Java 使用哈希映射而不是数组是否有空间开销?

Java 使用哈希映射而不是数组是否有空间开销?,java,arrays,object,dictionary,hashmap,Java,Arrays,Object,Dictionary,Hashmap,我试图实现一个trie,并在一个示例实现中读到,使用一个大小为26的小数组来存储子对象将更节省空间,因为这样您就不必在HashMap上浪费空间(如果有区别的话,代码是Java的) 但是,既然不必存储所有26个值,那么地图不是更节省空间吗?或者,包含字符对象作为键的HashMap对象只是更多的空间,因为简单的int[]类型不会在后台使用这些更复杂对象的实现将使用的额外空间 我只是想看看这个人是否搞错了,或者在使用HashMap之类的对象类型时是否有一些开销,我应该知道。HashMap存储键和值,因

我试图实现一个trie,并在一个示例实现中读到,使用一个大小为26的小数组来存储子对象将更节省空间,因为这样您就不必在HashMap上浪费空间(如果有区别的话,代码是Java的)

但是,既然不必存储所有26个值,那么地图不是更节省空间吗?或者,包含字符对象作为键的HashMap对象只是更多的空间,因为简单的int[]类型不会在后台使用这些更复杂对象的实现将使用的额外空间


我只是想看看这个人是否搞错了,或者在使用HashMap之类的对象类型时是否有一些开销,我应该知道。

HashMap存储键和值,因此如果要使用HashMap实现trie,那么不仅要存储值,还要存储键。如果使用数组,则键实际上是数组中值的索引,因此不必将其存储在任何位置


除此之外,哈希映射的空间效率低于数组,因为它们总是有一个小于1的负载因子,这就等于说,由于它们的工作方式,它们保留了比需要分配的更多的条目。我并没有就此展开讨论,因为它与您的问题无关,但如果您好奇,请搜索hashmap加载因子。

hashmap存储键和值,因此,如果要使用hashmap实现trie,您将不仅存储值,还存储键。如果使用数组,则键实际上是数组中值的索引,因此不必将其存储在任何位置


除此之外,哈希映射的空间效率低于数组,因为它们总是有一个小于1的负载因子,这就等于说,由于它们的工作方式,它们保留了比需要分配的更多的条目。我没有对此进行详细介绍,因为它与您的问题无关,但如果您好奇,请搜索hashmap加载因子。

这是一个经典的编程折衷方案。在这种情况下,使用
HashMap
将占用更多空间,但这可能是您愿意为提高性能而付出的代价。也可能不是。取决于您的问题。

这是一个经典的编程折衷方案。在这种情况下,使用
HashMap
将占用更多空间,但这可能是您愿意为提高性能而付出的代价。也可能不是。取决于您的问题。

当然会有一点开销,但它真的会相关吗?当然会有一点开销,但它真的会相关吗?您完全正确:由于您所述的原因,哈希映射的空间效率较低。但我认为Kayaman可能有真正的答案:
当然会有一点开销,但它真的会相关吗?
。我不希望看到有人在适当的地方不使用hashmap,只是为了节省几个字节。IMHO…@paulsm4是真的,但这不是对实际问题的回答,这就是为什么我避免重复它,因为Kayaman已经在评论中声明了。你完全正确:hashmap的空间效率较低,因为你所说的原因。但我认为Kayaman可能有真正的答案:
当然会有一点开销,但它真的会相关吗?
。我不希望看到有人在适当的地方不使用hashmap,只是为了节省几个字节,IMHO…@palsm4是真的,但这并不是对实际问题的回答,这就是为什么我避免重复它,因为Kayaman已经在评论中说明了这一点。