首页 > 解决方案 > 为什么一个对象不能有一个与之关联的数组位置而不是使用哈希图?

问题描述

我正在尝试理解 Hashmap 概念。我知道通过散列对象以查找其在内存中的位置来查找某个对象可能很有用。

但是,为什么我们不能有一个对象的属性与它在内存中的位置相对应,这样我们就可以在搜索对象时引用它。至于插入,我们可以有一个计数器存储对象的数量,因此插入可以是 O(1)。

为什么这不可行?

标签: hashmap

解决方案


我知道通过散列对象以查找其在内存中的位置来查找某个对象可能很有用。

哈希不会那样做!它的作用是根据对象的计算一个数字。即使在没有被覆盖的情况下Object::hashCode,代码仍然不是对象在内存中的地址。

地址的一个问题(以及为什么它们不能被使用)是当 GC 移动一个对象时,它的地址会改变。所以每次 GC 运行时,您都需要重建所有的哈希表。身份哈希码没有这个问题/成本。对象的身份哈希码永远不会改变。

第二个问题是,如果您(仅)使用地址作为哈希码,您将无法处理基于键值的(更常见的)哈希情况


推荐阅读