【发布时间】:2010-12-24 19:19:51
【问题描述】:
这是我的用例,我有一个对象在逻辑上等于我的 HashMap 键,但不是同一个对象(不是 ==)。我需要从 HashMap 中获取实际的关键对象,以便我可以对其进行同步。我知道我可以迭代 ketSet,但与散列相比这很慢。
查看 java.util.HashMap 实现,我看到了一个 getEntry(Object key) 方法,这正是我所需要的。知道为什么这没有被曝光吗?
你能想出别的办法吗?
【问题讨论】:
-
你可以通过反射得到它,如果没有其他方法,你仍然可以使用。
-
逻辑上等于 = 等于方法被覆盖? HashMap 总是使用 equals 而不是 ==。通常不鼓励使用可变对象作为键类。
-
@Geo:我会怀疑使用反射来获取要同步的对象;部分是因为性能问题,但主要是因为非常量对象上的显式同步无论如何都很难理解,更不用说通过反射不透明地获取该引用。它可能非常难以理解、遵循和调试,使维护成为一场噩梦。
-
是的,这是我的问题。我有一个对象 myobject.equals(key) == true 但 myobject == key 返回 false。我需要拿到关键对象。
-
@Geo:获取 HashMap 实现内部的方法或对象不是一个好主意。 HashMap 的内部结构不是 Java 的公共 API 的一部分,可能会在 Java 的未来版本中发生变化,或者 HashMap 可能在其他供应商的 HashMap 实现中实现完全不同。
标签: java concurrency hashmap