我发现了类似的问题,但到目前为止,他们都没有真正帮助我(这可能意味着我做错了,这就是为什么我在这里)。
我有一个HashMap Map<Integer, List<Book>>
应该有一个Student
的{{1}}作为密钥,并且他拥有的ID
列表作为值。虽然只传递Book
作为关键字,但我觉得这不是一个面向对象的方法,我应该使用ID
作为关键字(所以它看起来像这样:{ {1}})。我尝试使用它,但当我尝试返回给定的Student
Map<Student, List<Book>>
列表时,我遇到了一堆错误,很可能是因为找不到Student
。我的教授建议我使用Book
Java的Student
和@Override
方法,这是有道理的,因为这是hashCode
比较键的方式,但我没有成功(I我不确定我需要比较什么才能看出两个equals
是否相同;据说,他们HashMap
本身应该有效。以下是重写方法:
Student
我做错了什么?任何你可以放在这上面的光都会非常有帮助。提前谢谢!
答案 0 :(得分:1)
错误似乎出现在equals
方法中,前提是您的id
的值超出整数缓存范围,即-128 - 127
if (id != other.id) // <-- Error
return false;
从您的示例中,似乎id是Integer
对象
==检查引用是否相等,即它们是否指向同一个对象。
对于基本类型,==检查值是否相等。
java.lang.Integer是一个引用类型。 int是基本类型。
虽然在Integer的情况下,==仅适用于介于-128之间的数字 和JVM缓存那些值
您需要将其更改为
if (!id.equals(other.id))
return false;