aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes HashMap and hashCode() Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "HashMap and hashCode()" Watch "HashMap and hashCode()" New topic
Author

HashMap and hashCode()

saqib sarwar
Ranch Hand

Joined: Mar 30, 2007
Posts: 77
[B][/B]

IT OUTPUTS
2

Why if hashCode is same 9;
Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2367
Remember that the main requirement of the hashCode contract is that if two objects are equal according to the equals method, then they should have the same hashCode.

If you make the hashCode always return 9, and properly override equals, then you are fulfilling the contract.

It's not an error, it's just inefficienct.
[ April 04, 2007: Message edited by: Keith Lynn ]
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18138
    
  39

IT OUTPUTS
2

Why if hashCode is same 9;


Just because two objects have the same hashcode, doesn't meant that they are equal. If the hashcode are the same, then the map uses the equals() method to further test for equality.

Henry


Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
Srinivasan thoyyeti
Ranch Hand

Joined: Feb 15, 2007
Posts: 557
Hi sarwar,

You can refer to Map API to see what put method does.

Always refer API.


Thanks & Regards, T.Srinivasan
SCWCD 1.4(89%), SCJP 5.0(75%)
saqib sarwar
Ranch Hand

Joined: Mar 30, 2007
Posts: 77
1st thanks for prompt replies

NOW. as we know

[B][/B]

Outputs = false

SO



will return false for t1 and t2.

and obviously return false for t2 and t3.

than how

m.put(t1, "doLaundry"); // added to map OK
m.put(t2, "payBills"); // how can added to map if same hash as t1
m.put(t3, "cleanAttic"); // and how can t3 added to map if same hash as t1

kindly elaborate
Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2367
Notice you aren't creating new String objects, you are using String literals.
Srinivasan thoyyeti
Ranch Hand

Joined: Feb 15, 2007
Posts: 557
Hi Sarwar,

you are smart. i got you.

ToDos t1 = new ToDos("Monday"); // "Monday" created in pool
ToDos t2 = new ToDos("Monday"); // "Monday" refers to above in pool

Hence both the keys are equal by definition

public boolean equals(Object o) { return ((ToDos)o).day == this.day; }

If you don't want them to be overwritten try like this

ToDos t1 = new ToDos(new String("Monday"));
ToDos t2 = new ToDos(new String("Monday"));

Hope it clear.
Lets Rock
saqib sarwar
Ranch Hand

Joined: Mar 30, 2007
Posts: 77
thanks thoyyeti .

thanks a lot . i got it.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: HashMap and hashCode()
 
Similar Threads
Hashmap Confusion
scjp chapter 7 self test doubt
Detecting Duplicates in Hashmap
How to write toString method to display name of Object
HashMap Duplicate Element Problem