This week's giveaway is in the Threads forum.
We're giving away four copies of Java Concurrency Live Lessons and have Doug Schmidt on-line!
See this thread for details.
Win a copy of Java Concurrency Live Lessons this week in the Threads forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

equals() & hashCode()  RSS feed

 
Santosh Pasupuleti
Ranch Hand
Posts: 97
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What happens if I override the equals() method but do not override the hashCode() if I am using the following class as a key in a hashmap? What will be the impact on performance while I perform a searching assuing that the HashMap has a milion entrie?

class MyKey{
int i;
boolean equals(Object obj){
if (obj == null)
return false;
if (obj == this)
return true;
return (((MyKey)obj).i == this.i);
}
 
Ernest Friedman-Hill
author and iconoclast
Sheriff
Posts: 24215
37
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The impact on performance will be that it won't work. If hashCode() and equals() don't agree, it will be impossible to find many keys in the map.
 
Jim Yingst
Wanderer
Sheriff
Posts: 18671
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
For this code, an appropriate hashCode() is very simple anyway, since the equals depends only on i:

For discussion of hashCode() for more complex classes (and many other useful issues), I recommend Effective Java.
 
Chetan Raju
Ranch Hand
Posts: 109
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
When you override equals method, you are deciding as to in what cases you say two objects of your class as equal. If you decide that two objects are equal then hashcode must be equal. we cannot have the same guy at different places simultaneously right.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!