PS: Acho a outra alternativa muito mais elegante.
Crie uma classe:
public MesAno implements Comparable<MesAno> {
private int mes;
private int ano;
public MesAno(Data data) {
this.mes = mes;
this.ano = ano;
}
public int getMes() { return mes; }
public int getAno() { return ano; }
public int compareTo(MesAno other) {
int compare = ano - other.ano;
if (compare != 0) return compare;
return mes - other.mes;
}
public String toString() {
return mes "/" + ano;
}
}
Depois, passe a usar objetos dessa classe no seu mapa:
MesAno mesEAno = new MesAno(data);
if (!map.containsKey(mesEAno)
map.put(mesEAno, new ArrayList());
(ArrayList) map.get(mesEAno).add(registro);
A vantagem é que, se você precisar mudar o formato da data, a ordem dos registros, ou mesmo incluir informação adicional na chave, pode fazer apenas mudando a classe MesAno. Isso também evita os parseInts e um comparator muito complexo.
Conforme sugere o Joshua Bloch no livro Effective Java, a classe String só deve ser usada para valores que representam texto. No caso, a sua chave é um valor que presenta uma data no formato MesEAno. Por isso, é melhor criar uma classe separada. Ela pode provar ser muito mais útil com o passar do tempo.