I am trying to check and delete items using a HashMap in Java. Its keys are type I created under the name ClusterKey, and its values ββare type I created under the name ClusterValue.
Here is the code causing the problems:
ClusterKey ck = new ClusterKey(Long.parseLong(split[0].split("=")[1]), Integer.parseInt(split[1].split("ey")[1])); if (arg == 0) keys.put(ck, new ClusterValue(index, false)); if (arg == 1) { if (keys.containsKey(ck)) { index = keys.get(ck).messageNo; keys.remove(ck); } keys.put(ck, new ClusterValue(index, true)); }
The problem is that even if ClusterKey matches the existing ClusterKey, containsKey () and remove () do not seem to recognize it equal. I applied equals () in the ClusterKey class to override the Java equals () method as follows:
class ClusterKey { long firstKey; int secondKey; public ClusterKey(long firstKey, int secondKey) { this.firstKey = firstKey; this.secondKey = secondKey; } public boolean equals(Object otherKey) { return this.firstKey == ((ClusterKey) otherKey).firstKey && this.secondKey == ((ClusterKey) otherKey).secondKey; } }
So, I am very confused. Thank you very much for your help.
Regards, Rebecca
UPDATE: Thanks for your tips and feedback on my code. I was able to solve the problem by adding hashCode () to ClusterKey as follows:
} public boolean equals(Object otherKey) { return this.firstKey == ((ClusterKey) otherKey).firstKey && this.secondKey == ((ClusterKey) otherKey).secondKey; } public int hashCode() { return (int) firstKey + secondKey; }
source share