通过用户对象从Hashmap获取值

Ken*_*tov 5 java dictionary hashmap

我有这样的 hashmap

HashMap<Man, Double> d = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

然后我添加新的一对.

d.put(new Man("John"), 5.);
Run Code Online (Sandbox Code Playgroud)

如何从此地图中检索此对?我试着这样做:

Man man = new Man("John");
System.out.println(d.get(man));
Run Code Online (Sandbox Code Playgroud)

但结果是null我想到的结果5.

Nic*_*tto 5

这只有在您覆盖方法时才能使用,equals(Object obj)并且hashCode()在您的类Man中允许您HashMap理解即使它们不是相同的实例,它们也具有相同的内容,并且应该被视为地图中的相同键.

所以假设你的班级Man是这样的:

public class Man {
    private final String name;

    public Man(final String name) {
        this.name = name;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果您要求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);
}
Run Code Online (Sandbox Code Playgroud)