ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
I am using instances of one of my classes as key. I overrid the equals(Object) method so that diferent instances of the same class (key class) with the same ID are equal.
When I use the get(Object) method on the HashMap I expect to see messages on the console I wrote in the equals of the key objects... but it doesn't work.
What's wrong?
The only thing I can come up is that the HashMap be not using the equals method to compare the keys.
Why not finding by yourself ?
Java classes source code is included in the JDKs, usually as a zip file (src.zip) in the top directory.
Look for java/util/HashMap.java
Map myMap = new HashMap();
Integer key = new Integer(5);
String value = "five";
myMap.put(key, value);
key = new Integer(12); value = "twelve"; myMap.put(key, value);
key = new Integer(20); value = "twenty"; myMap.put(key, value);
key = new Integer(5);
// this is the trick
value = (String) myMap.get(key);
System.out.println(value); // this should print "five"
Though the key that I used is not the same instance of Integer that I used to put the value, I should get the same value that I used when I inserted "five" as a value, and that is because New Integer(5).equals(new Integer(5)) is true (as far as I know). Am I wrong?
If I'm correct then I don't know why the F&/(%&NG HashMap doesn't get me the right values because I overid the equals(Object) method of the classes that I'm using as keys.
You piece of code gives five for me.
If you have a different behaviour, you are probably right thinking overriding the equals method is the source of your problem.
By the way, reading the Java source code is not forbidden and may be instructive.
I (as a developer) can't take the time to study everything everyone has written. If there's one specification that stipulates the way one method in a class works, I SHOULDN'T need to go to ONE IMPLEMENTATION to take a look at the code, I have to trust the specification cause that's what the code should implement anyway (any implementation).
Any way:
I took a closer look at the API specification and found that (apparently) the AbstractMap will go through the keys and compare them, probably doing a "=="..... it doesn't say it will use the equals(Object) method. So I guess that's the problem.
I (as a developer) can't take the time to study everything everyone has written.
I won't do it either just for you ...
If you feel the specs aren't clear enough or do not represent the reality of the implementation, just confirm it by looking the code and then file a bug at http://bugs.sun.com/bugdatabase/index.jsp
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.