hashmap - 为什么一个对象不能有一个与之关联的数组位置而不是使用哈希图?
问题描述
我正在尝试理解 Hashmap 概念。我知道通过散列对象以查找其在内存中的位置来查找某个对象可能很有用。
但是,为什么我们不能有一个对象的属性与它在内存中的位置相对应,这样我们就可以在搜索对象时引用它。至于插入,我们可以有一个计数器存储对象的数量,因此插入可以是 O(1)。
为什么这不可行?
解决方案
我知道通过散列对象以查找其在内存中的位置来查找某个对象可能很有用。
哈希不会那样做!它的作用是根据对象的值计算一个数字。即使在没有被覆盖的情况下Object::hashCode
,代码仍然不是对象在内存中的地址。
地址的一个问题(以及为什么它们不能被使用)是当 GC 移动一个对象时,它的地址会改变。所以每次 GC 运行时,您都需要重建所有的哈希表。身份哈希码没有这个问题/成本。对象的身份哈希码永远不会改变。
第二个问题是,如果您(仅)使用地址作为哈希码,您将无法处理基于键值的(更常见的)哈希情况。
推荐阅读
- jestjs - 基本的 create-react-app 笑话测试解释
- yocto - 由于软件包安装导致的 do_rootfs 错误
- php - MAMP 和 CodeIgniter - 简单表单帖子返回致命错误:未捕获错误:未找到类“CI_Controller”
- reactjs - 为什么我的反应代码什么都不做?它没有更新 DOM
- typescript - 打字稿:构造引用自身的对象的最佳方法
- javascript - 由于 CSS,Cookie 没有保存背景颜色
- java - 使用 mapstruct 进行映射:错误:(22,48)java:参数“quote”的类型没有名为“quote_type”的属性
- typescript - 在打字稿模块声明中重新导出符号
- matlab - 从线中提取有序点
- python - 我的功能有什么问题?使用 numpy 和 networkx 查找最短路径