java - 通过用户对象从 Hashmap 获取值

标签 java dictionary hashmap

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

最佳答案

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

所以假设你的类 Man 是这样的:

public class Man {
    private final String name;

    public Man(final String name) {
        this.name = name;
    }
    ...
}

如果您要求您的 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);
}

关于java - 通过用户对象从 Hashmap 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230294/

相关文章:

python - 运行时错误: dictionary changed size during iteration in python

java - 将 HashMap 键值 (String) 转换为 Vector <String>?

java - 嵌套 TreeMap 排序

java - Intellij - JAVA 错误(导入等...)未检测到

java - Spring在 "Executing identity-insert immediately"时不回滚

java - io.iron.ironmq.HTTPException : Not found (IronMQ JAVA)

python - 如何从 python 数据框中检索和存储多个值?

java - 带注解的 Spring 4 PropertyPlaceholder

c# - 从值为 List<string> 的字符串中获取键

java - 为什么HashMap中的Entry类在java中是静态的