假设我有一个包含大量对象的Map,其中所有对象都包含大量杂乱数据,在比较它们时会被忽略(使用.equals()
)。例如:
public class Complex {
private long id;
// Many other fields...
// Methods, getters, setters...
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Complex other = (Complex) obj;
if (id != other.id) // Note that only id is compared.
return false;
return true;
}
}
我可以轻松地使用
myMap.get(new Complex(id));
或mySetOrMap.contains(new Complex(id));
在常数时间内找到这个map或set是否包含一个特定id的键,但不幸的是这不是我所需要的。我需要的是条目,其中包含原始键(它包含所有杂项数据)和值。
我的可能解决方案如下:
1. 我可以轻松地遍历hashmap,但那不太优雅也不快。
2. 我可以更改我的整个映射实现,使其成为
Map >
,但这似乎有点过度。3. 我可以有另一个映射:
Map
,这可能是最可行的。总之:是否有一种优雅的方法可以检索用于创建映射中的条目的原始键,假设您具有与其相同的哈希码的东西?
在编写本文后,我找到了一个4年前的重复,但想知道我们是否可以修改答案(它是Java 7之前的)。
HashMap<Long,?>
- Karthik