我有这样的hashmap
HashMap<Man, Double> d = new HashMap<>();
然后,我在其中添加新的一对。
d.put(new Man("John"), 5.);
如何从这张 map 中检索这对?
我试着做:
Man man = new Man("John");
System.out.println(d.get(man));
但是结果是我有
null
,而我期望是5
。 最佳答案
仅当您覆盖类equals(Object obj)
中的hashCode()
和Man
方法以允许HashMap
理解,即使它们不是同一实例时,它们也具有相同的内容,并且应被视为 map 中的相同键,这才有效。
因此,假设您的类Man
是这样的:
public class Man {
private final String name;
public Man(final String name) {
this.name = name;
}
...
}
如果您要求 IDE IDE 为您生成方法,则会得到以下信息:
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || this.getClass() != o.getClass()) return false;
final Man man = (Man) o;
return Objects.equals(this.name, man.name);
}
@Override
public int hashCode() {
return Objects.hash(this.name);
}