what is the need of hashcode in java
It is not always necessary to override hashcode and equals. But if you
think you need to override one, then you need to override both of them.
Let's analyze what whould happen if we override one but not the other
and we attempt to use a
Map
.hashCode
then when you call myMap.put(first,someValue)
it takes first, calculates its hashCode
and stores it in a given bucket. Then when you call myMap.put(second,someOtherValue)
it should replace first with second as per the Map Documentation because they are equal (according to our definition).
But the problem is that equals was not redefined, so when the map hashes
second
and iterates through the bucket looking if there is an object k
such that second.equals(k)
is true it won't find any as second.equals(first)
will be false
.Override only
equals
If only
equals
is overriden, then when you call myMap.put(first,someValue)
first will hash to some bucket and when you call myMap.put(second,someOtherValue)
it will hash to some other bucket. So, although they are equal, as they don't hash to the same bucket (different hashCode
) the map can't realize it and both of them stay in the map.
No comments:
Post a Comment