我试图实现一个trie并在一个示例实现中读取,使用一个大小为26的小数组来存储子节点会更节省空间,因为那样你就不必用HashMap浪费空间了(代码是用Java编写的,如果有所不同的话)
但是,由于您不一定需要存储所有26个值,因此地图不会更节省空间吗?或者是一个HashMap对象,它包含Character对象作为键,只是更多的空间,因为简单的int []类型不会在后台使用额外的空间来处理这些更复杂的对象的实现?
只是想检查一下这个人是否错了,或者我是否应该注意使用像HashMap这样的对象类型的一些开销。
答案 0 :(得分:2)
散列映射存储键和值,因此如果要使用散列映射实现trie,则不仅要存储值,还要存储键。如果使用数组,那么键实际上是数组中值的索引,因此您不必将其存储在任何位置。
除此之外,hashmaps的空间效率低于数组,因为它们总是有一个小于1的加载因子,这与说它们保留的分配数量超过必要数量相同。他们的工作方式。我没有扩展,因为它与您的问题无关,但如果您好奇,请搜索 hashmap加载因子。
答案 1 :(得分:0)
这是一种经典的编程妥协。在这种情况下,使用HashMap
会占用更多空间,但这可能是您愿意为提高性能而付出的代价。或者它可能不会。取决于你的问题。