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 ]
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.
You can refer to Map API to see what put method does.
Always refer API.
Thanks & Regards,<br />T.Srinivasan,<br />SCWCD 1.4(89%),SCJP 5.0(75%)<br />"That service is the noblest which is rendered for its own sake." - Mahatma Gandhi
saqib sarwar
Ranch Hand
Joined: Mar 30, 2007
Posts: 77
posted
0
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: 2341
posted
0
Notice you aren't creating new String objects, you are using String literals.
Srinivasan thoyyeti
Ranch Hand
Joined: Feb 15, 2007
Posts: 557
posted
0
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
posted
0
thanks thoyyeti .
thanks a lot . i got it.
I agree. Here's the link: http://ej-technologies/jprofiler - if it wasn't for jprofiler, we would need to
run our stuff on 16 servers instead of 3.