繁体   English   中英

有没有办法通过其哈希码检索jvm对象

[英]Is there a way to retrieve a jvm object by its hash code

假设我有一个对象,obj.hashCode()返回8973846,

我可以使用哈希码调用函数并获取对象吗?

编号hashCode()不是唯一的(即不同的对象可以具有相同的hashCode。即使是相同类型的不同对象也可以具有相同的hashCode ),因此不可能实现这样的方法。

在创建对象时,您可以做的最好的事情是将它们放入一个将哈希代码映射到实例的大HashMap<Integer,Object>中。 这样,您就可以在以后检索它们。

但是有两个主要问题:

  1. 由于哈希码不能保证是唯一的,因此您将使用正确的哈希码检索某些内容 ,但不一定是您期望的内容。 您需要对所有内容进行编码,以便哈希代码具有高概率的唯一性(当只有32位时,这将很难)。
  2. 除非你在完成它们时也从哈希映射中删除对象,否则你的垃圾收集器会遇到很大的问题。 通常,垃圾收集器会清除任何没有任何引用的实例,但在您的情况下, 所有内容都将在哈希映射中维护一个引用。 欢迎来到亚利桑那州的Memory Leak City。

您可以尝试使用WeakHashMap来缓解第二个问题,尽管这可能会导致更多问题:当您稍后尝试检索对象时,它可能已经消失了......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM