使用hashmap与整数(索引)用作键与使用阵列列表的键



因此,我目前正在制作自己的Pokemon版本,以Java复制。我只是最近才熟悉更高级的数据结构,但我仍然不确定什么时候应该比另一个更合适。

基本上,我想存储一个Pokedex(Pokemon的数据库),Hashmap似乎可以使最合适。密钥将是Pokemon的Pokedex#,该值将是所讨论的口袋妖怪对象。但是,由于Pokedex的性质,这意味着每个口袋妖怪的Pokedex#将只是他们在Pokedex中各自的索引。

我的问题是,当键只是索引值时,使用hashmap是有意义的,还是将pokedex存储为阵列列表(甚至数组)会更有意义,而每个口袋妖怪都存储在各自的索引上?

显然,如果我还没有为每个口袋妖怪创建定义,那么阵列列表将是不效率的,因为我们必须为每个口袋妖怪预订空间,但是据我了解,我了解hashmaps中的键都应该用于创建哈希值,而不是直接索引对吗?还是适当的?

这确实取决于。地图为您提供了更高的自由度,而列表/数组可能会迫使您进入使用此类线性/顺序数据结构的后果。

然后,这取决于您的数组将如何填充。如果"键"运行0至1000,则很少或没有未使用的插槽,则列表很好。如果钥匙为0到1000万,并且大多数插槽空着:使用地图。或针对稀疏矩阵优化的数据结构。

除此之外,请记住,数组不包含对象本身的内存,而只是指向它们的引用。因此,无论插槽是空的还是指向某个地方,数组的内存足迹都是相同的。

您使用hashmap的第一个本能是正确的。尽管阵列更有效,但在您的情况下,这种效率毫无意义。在Pokedex中查找口袋妖怪将是您程序所做的最耗时的事情之一;优化它将毫无意义,甚至可能无意中引入错误(例如,逐个错误)

最新更新