• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Collections

 
Ranch Hand
Posts: 187
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
i am really confused about entire collections..................
somebody tell me whether when should i use equals and hashCode method......and when should i use Comparable and Comparator???
i know that when we override equals but not hashCode our duplicates are not removed and when we override our duplicate elements are removed???



Thanks

 
Ranch Hand
Posts: 1183
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hey,

first, when you override equals, always override hashCode. Those two go alongside and all contracts involve them both.

Now here is how it works.

Two instances of the same type are always different (the == operator returns false) since what is compared is the object's reference.

Now, there has to be a way to declare two objects as 'meaningfully equivalent'. Imagine the Date class. two instances should be the same when their date is the same. This is where you would override the equals method and do the comparison.

hashCode gives an instance something like an ID. two instances can have the same hashCode but still be different. But the same does not apply vice versa.

Collections use hashCode to allocate the spot where the object instances gets stored.
Imagine a Set. If you add an object to the set, it's hashCode method is invoked, an ID comes back that tells the Set where to put the object. Now another object comes along with a different ID, which gets stored in another location. Now an object with the same ID comes along. The set finds that there already is an object in that spot. If now object1.equals(object2) returns true, the new object will not be addded, if it returns false it will be added.
This is where two different objects can have the same hashCode becomes important.
Also, you see why the hashCode method becomes important. If hashCode is not implemented properly, the Set would always allocate different objects in different spots, hence one spot contains one object and there is no way to check for equality which means that duplicates will result.

Why the whole mess of hashCodes and different spots where objects go?
Imagine you put 458943058 objects into your set. They'll be nicely distributed between a number if spots so that if you want to find a specific object, this can happen fast :-)


Hope this helps

 
maggie karve
Ranch Hand
Posts: 187
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hey thanks Sebastian......it was great!!!
 
maggie karve
Ranch Hand
Posts: 187
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hey i have tried using different classes which implement Collection and Map...
and i have come to a conclusion that Treemap,TreeSet and alll Lists like ArrayList,LinkedList and Vector need Comparable or Comparator to sort sequences........and others like HashSet,LinkedHashMap,HashMap,LinkedHashMap,Hashtable they all need to override equals and hashcode to remove duplicate elements.........am i right...this is what was happening in my programs......incase if i am wrong please correct me.....


thanks................
reply
    Bookmark Topic Watch Topic
  • New Topic