使用身份哈希映射

时间:2016-08-23 02:45:50

标签: java hashmap

我谷歌了解身份哈希地图的用法,但没有找到一个好的答案。我也没有得到下面的java doc解释:

此类的典型用法是保留拓扑的对象图转换,例如序列化或深度复制。要执行这样的转换,程序必须维护一个节点表"跟踪已经处理的所有对象引用。节点表必须不等同于不同的对象,即使它们碰巧相等。此类的另一个典型用法是维护代理对象。例如,调试工具可能希望为正在调试的程序中的每个对象维护一个代理对象。

有人可以提供一个很好的身份哈希映射用例吗?

1 个答案:

答案 0 :(得分:0)

我想这里的重点是

  

节点表必须不等同于不同的对象,即使它们碰巧相等

如果您将一个键值对添加到地图中,例如hashmap将使用equal方法检查密钥是否已存在。但是在某些情况下,您希望比较其真实标识中的密钥,其中Java是对象引用(地址)。如Java doc中所述,一个用例可以是管理代理对象的映射。如果你有两个“相等”的对象,你仍然想为它们创建一个单独的代理对象。至于缓存,您希望将这些代理对象存储在地图中。然后使用身份映射将源对象作为键,将代理对象作为值。

希望这会让它更清晰一些。