import java.util.*;
import static java.lang.System.*;
public class Doppleganger implements Comparable {
int hashValue;
@Override
public int compareTo(Object other) {
Doppleganger dg = (Doppleganger) other;
return hashValue==dg.hashCode()?0:hashValue<dg.hashCode()?-1:1;
}
void setHashValue(int hash) {
this.hashValue = hash;
}
@Override
public int hashCode() {
return this.hashValue;
}
public static void main(String[] args) {
Doppleganger dg1 = new Doppleganger();
Doppleganger dg2 = new Doppleganger();
Map<Doppleganger, String> map = new HashMap<Doppleganger, String>();
dg1.setHashValue(1);
dg2.setHashValue(2);
map.put(dg1, "1");
map.put(dg2, "2");
dg1.setHashValue(2);
out.printf("%d. %d => %s\n", 1, dg1.hashCode(), map.get(dg1));
out.printf("%d. %d => %s\n", 2, dg2.hashCode(), map.get(dg2));
// TreeMap requires its Key implement Comparable
map = new TreeMap<Doppleganger, String>();
dg1.setHashValue(1);
dg2.setHashValue(2);
map.put(dg1, "1");
map.put(dg2, "2");
dg1.setHashValue(2);
out.printf("%d. %d => %s\n", 3, dg1.hashCode(), map.get(dg1));
out.printf("%d. %d => %s\n", 4, dg2.hashCode(), map.get(dg2));
}
}
C:\src\java>java Doppleganger
1. 2 => null
2. 2 => 2
3. 2 => 1
4. 2 => 1
C:\src\java>