import java.util.*; class Day { private int y,m,d; public Day(int y1,int m1,int d1) {y=y1;m=m1;d=d1;} public String toString() {return d+"/"+m+"/"+y;} @Override public int hashCode() { return y*10000+m*100+d; } @Override public boolean equals(Object x) {return y*10000+m*100+d==((Day)x).y*10000+((Day)x).m*100+((Day)x).d;} } class Main { public static void main(String[] args) { Map m = new HashMap<>(); m.put(new Day(2015, 4, 15), 100); m.put(new Day(2012, 12, 31), 200); m.put(new Day(2015, 4, 15), 1100); Set kSet = m.keySet(); for (Day k : kSet) System.out.printf("%s(%d)\n", k, m.get(k)); } } /* HashMap only: 31/12/2012(200) 15/4/2015(100) 15/4/2015(1100) */ /* HashMap + equals: 31/12/2012(200) 15/4/2015(100) 15/4/2015(1100) */ /* HashMap + hashCode: 15/4/2015(1100) 15/4/2015(100) 31/12/2012(200) */ /* HashMap + hashCode + equals: 15/4/2015(1100) 31/12/2012(200) */