jar*_*sik -4 java equals hashcode
我已经看到很多关于不用Java覆盖hashCode的问题而且我得到了它,但是在这种稍微不同的情况下会发生什么:
hashCode = 1且equals未被覆盖.
似乎没有违反HashCode合约 - 我们为相同的对象返回相同的hashCode.但是这种实现允许添加重复键并为逻辑上相等的键重新调整null.另一方面,当:
hashCode = 1和@Override equals()
它工作得很好.我很难弄清楚这两种情况下发生了什么.
假设您要求将您的课程作为一个关键词HashMap.
在第一个场景中,因为equals没有被覆盖,a.equals(b)当且仅当a==b.因此,该实现允许"逻辑"重复,因为两个不同的实例可能对于它们的所有属性具有完全相同的值,但是它们仍然不被认为彼此相等.
在第二种情况下,当equals被覆盖时,您的实现确定同一类的两个对象何时彼此相等.
这两种情况都不违反合同hashCode,但由于hashCode总是返回1,因此所有密钥都将映射到同一个bin,并且将成为a 时,两者在作为a中的键HashMap或作为元素中的键时将具有不良性能.HashSetHashMap\HashSetLinkedList