【发布时间】:2014-04-07 14:35:02
【问题描述】:
我正在尝试执行双向 A 星搜索,我在哪里遇到了这个问题。
假设我在哈希集 H 中有一个对象 A。假设有另一个对象 B,使得 A.equals(B) 为真(并且它们的哈希值也相同),尽管 A 和 B 指向不同的对象.现在,当我检查对象 B 是否在哈希集 H 中时,它按预期返回 true。但是,假设现在,我想基于此访问对象 A 中的某些属性,然后我需要访问对象 A。请注意,访问 B 中的相同属性将不起作用,因为它们仅在 equals 方法下相等,但不指向同一个对象。我怎样才能做到这一点?
一种方法是使用 Hashmap,使得值类型与键类型相同,并且每次我在 hashmap 中存储一些键时,我都会存储与其值相同的对象。但这会导致存储值的额外内存开销,而我真正需要的是密钥本身的副本。有没有其他方法可以做到这一点?
【问题讨论】:
-
所以如果你不能将 A 和 B 存储在同一个哈希集中,因为冲突。您打算如何访问它们?
-
@Vash:重点是根据
B的值找到A的值。B值不需要存储在集合中......它只是用作查找键。不幸的是,Set不允许您找到任何方法来查找“存储在集合中的值,恰好等于您提供的键值”。 -
@JonSkeet,这是一个强有力的假设。但在这种情况下,答案将是调用 map.get(objectB) 将返回
objectA. And that is why Map interface do not use generic type inget` 和contains方法的实例。 -
@JonSkeet,以及您在回答中所描述的内容。在医疗时间。不错。
-
@Vash:我不会说这是一个“强有力的假设”——这是对问题的一种解释,我认为这是一个非常合理的解释。问题中的所有内容都同意。