import java.io.*; import java.util.*; class Day implements Comparable { 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;} @Override public int compareTo(Day x) { return (y*10000+m*100+d) - (x.y*10000+x.m*100+x.d);} } class Main { public static void main(String[] args) { Map m = new TreeMap<>(); 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)); } } /* TreeMap only: ClassCastException: Main_treeMap$Day cannot be cast to java.lang.Comparable */ /* TreeMap + compareTo: 31/12/2012(200) 15/4/2015(1100) */