我有这样的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);
}

10-07 19:51
查看更多