Setting own class as key in java Hashmap
Solution 1
You need to implement hashCode()
and equals()
. compareTo()
is additionally required for sorted map/set.
See this question for details.
Solution 2
You should implement equals()
and hashCode()
. Your class should also be immutable. If it is mutable, it's hash code can change after adding it to map. Then the map can have problems finding it.
Solution 3
1) In general for collections, what you want to override is the equals() method (and also the hashcode() method) for your class. compareTo()/Comparable and Comparator are typically used for sorting and only take the place of using the equals() method for object equivalance in some cases - examples are implementers of SortedSet such as TreeSet.
2) Please conform to Java naming standards in your code. Your class names should be capitalized... e.g new MyKey(dummyArguments)
. See http://www.oracle.com/technetwork/java/codeconventions-135099.html#367 (and http://www.oracle.com/technetwork/java/codeconvtoc-136057.html) for more detail.
Related videos on Youtube
Comments
-
Nikhil Garg almost 2 years
I have a class which I want to set up as keys in HashMap. I already have implemented the compareTo method for that class. But still when I do:
map.put(new MyKey(dummyArguements) , dummyValue ); System.out.println(map.get( new MyKey(dummyArguements) ) );
I get null. So that means hashmap is not able to identify that the two keys (for get & put call) are same.
Could someone help me here please ?
-
fastcodejava almost 14 yearsHe is doing new before
put
andadd
. So immutable does not matter. Still a good point, +1.