| Author |
Doubt in Generic Map
|
Asmita Khamkar
Greenhorn
Joined: Mar 28, 2009
Posts: 23
|
|
Hi,
This is Asmita, I have a doubt in the following map code
import java.util.*;
class Dog
{
public Dog(String n)
{
name=n;
}
public String name;
public boolean equals(Object o)
{
if((o instanceof Dog) && (((Dog)o).name == this.name))
{
return true;
}
else
{
return false;
}
}
public int hashcode()
{
return name.length();
}
public String toString()
{
return ( name );
}
}
class Cat {
}
enum Pets {DOG, CAT, HORSE}
class MapTest
{
public static void main(String[] args)
{
Map<Object, Object> m = new HashMap<Object, Object>();
m.put("k1", new Dog("aiko"));
m.put("k2", Pets.DOG);
m.put(Pets.CAT, "CAT key");
Dog d1 = new Dog("clover");
m.put(d1, "Dog key");
m.put(new Cat(), "Cat key");
System.out.println(m.get("k1"));
String k2 = "k2";
System.out.println(m.get(k2));
Pets p = Pets.CAT;
System.out.println(m.get(p));
System.out.println(m.get(d1));
System.out.println(m.get(new Cat()));
System.out.println(m.size());
d1.name = "magnolia"; //lines of doubt
System.out.println(m.get(d1));
d1.name = "clover";
System.out.println(m.get(new Dog("clover")));
d1.name = "arthur";
System.out.println(m.get(new Dog("clover")));
}
}
I got this code from SCJP java 5 written by Kathy Sierra.
My problem starts on the line commented as lines of doubt.
In the book it is written that after d1.name ="magnolia"; is done the invocation of m.get(d1); should give null as the hashcode method fails, but when I run this code it gives the d1 keys value. In the next invocation m.get(new Dog("clover")); it should give me the matching key value i.e Dog Key, but it gives null.
Aren't the equal & hashcode methods working . What do this methods actually do.
Please help me, Thank you for help in advance.
Asmita
|
 |
Henry Wong
author
Sheriff
Joined: Sep 28, 2004
Posts: 16680
|
|
Aren't the equal & hashcode methods working . What do this methods actually do.
Its the equals() and hashCode() methods. Java is case sensitive.
Henry
|
Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
|
 |
Asmita Khamkar
Greenhorn
Joined: Mar 28, 2009
Posts: 23
|
|
I know sir its equals() & hashcode() methods I have written correctly in code, the code is compiling and running properly but it is not giving the output as written in book.
Asmita
|
 |
Henry Wong
author
Sheriff
Joined: Sep 28, 2004
Posts: 16680
|
|
Asmita Khamkar wrote:I know sir its equals() & hashcode() methods I have written correctly in code
hashCode()... with the capital C.
Asmita Khamkar wrote:the code is compiling and running properly but it is not giving the output as written in book.
What you are describing, particularly here...
In the next invocation m.get(new Dog("clover")); it should give me the matching key value i.e Dog Key, but it gives null.
Is exactly what should happen if you misspell the hashCode() method.
Henry
|
 |
Asmita Khamkar
Greenhorn
Joined: Mar 28, 2009
Posts: 23
|
|
Thank you very much for your help sir got my mistake Thank you very much.
Asmita
|
 |
 |
|
|
subject: Doubt in Generic Map
|
|
|