【发布时间】:2017-03-11 14:24:15
【问题描述】:
我发现了类似的问题,但到目前为止都没有真正帮助我(这可能意味着我做错了什么,这就是我在这里的原因)。
我有一个 HashMap Map<Integer, List<Book>> 应该有一个 Student 的 ID 作为键和他拥有的 Book 列表作为值。虽然只传递ID 作为密钥有效,但我觉得它不是一种足够面向对象的方法,我应该使用Student 作为密钥(所以它看起来像这样:Map<Student, List<Book>>)。我尝试使用它,但是当我尝试返回给定的Student 的Book 列表时出现了一堆错误,很可能是因为找不到Student。我的教授建议我使用 @Override Java 的 hashCode 和 equals 方法,这是有道理的,因为这就是 HashMap 比较键的方式,但我在这方面没有成功(我不确定我到底需要什么比较以查看两个Student 是否相同;据说,它们的ID 单独应该可以工作)。以下是被覆盖的方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
我做错了什么?您可以对此有所了解的任何信息都将非常有帮助。提前致谢!
【问题讨论】:
-
错误在别处。发布一个完整的最小示例来重现问题。
-
if (id != other.id) return false; return true;为什么你更喜欢这个而不是return id.equals(other.id);?
标签: java hashmap equals hashcode