【发布时间】:2017-11-24 23:41:37
【问题描述】:
我想为每个可用于查询地图的键获取“规范”键对象。见这里:
Map<UUID, String> map = new HashMap();
UUID a = new UUID("ABC...");
map.put(a, "Tu nejde o zamykání.");
UUID b = new UUID("ABC...");
String string = map.get(b); // This gives that string.
// This is what I am looking for:
UUID againA = map.getEntry(b).key();
boolean thisIsTrue = a == againA;
HashMap 使用 equals(),对于多个唯一对象也是如此。所以我想从映射中获取实际的键,无论使用什么对象来查询映射,它总是相同的。
有没有办法从地图中获取实际的关键对象?我在界面中看不到任何内容,但也许是我忽略了一些巧妙的技巧?
(迭代所有条目或键不计算在内。)
【问题讨论】:
-
出于什么目的?您关心实际对象身份的唯一时间是您是否正在同步或滥用
==。注意哈希映射同时使用hashCode()和equals()。 -
回复:“A
HashMap使用hashCode(),这对于多个唯一对象是相同的”:更相关的是,它使用equals()而不是==。hashCode()只是为了快速缩小使用equals()所需的键集。 -
这次和上一次你问这个问题的不清楚的是你问这个问题的原因。至少上次你有一个原因,虽然你发布的代码实际上毫无意义。这一次,什么都没有,甚至在 23 分钟前和几次编辑之前被特别要求解释时也没有。
-
如果您的设计依赖于获取对特定实例的引用,那么最初传递给
put(K,V)的关键实例和等效项(通过hashCode()和equals())是不够的,那么你的设计坏了。除非你能提供一个令人信服的理由,否则我们必须假设它是XY Problem。 -
你为什么问重要:当问题显得毫无意义时;当你被问到时;当你问的问题看起来像 XY 问题时;当你之前提出这个问题的动机被证明是虚假的。您是否正在寻找
IdentityHashMap?
标签: java dictionary key