Comparador e iguais ()

Suponha que eu preciseTreeSet com elementos classificados com alguma lógica de domínio. Por essa lógica, não importa a ordem de alguns elementos que não sejam iguais, portanto, o método compare pode retornar 0, mas, neste caso, eu não poderia colocá-los emTreeSet.

Então, pergunta: quais desvantagens terei de código como este:

class Foo implements Comparable<Foo>{}
new TreeSet<Foo>(new Comparator<Foo>(){
    @Override
    public int compare(Foo o1, Foo o2) {
        int res = o1.compareTo(o2);
        if(res == 0 || !o1.equals(o2)){
            return o1.hashCode() - o2.hashCode();
        }
        return res;
    }
});

Atualizar:

Está bem. Se deve sempre haver uma consistência entre os métodosequals(), hashcode() ecompareTo(), como @ S.P. Floyd - seanizer e outros disseram. Se seria melhor ou até bom se eu removerComparable interface e mover essa lógica emComparator (Eu posso fazer isso sem encapsulamento quebrado)? Então será:

class Foo{}
new TreeSet<Foo>(new Comparator<Foo>(){
    @Override
    public int compare(Foo o1, Foo o2) {
        //some logic start
        if(strictliBigger(o1, o2)){ return 1;}
        if(strictliBigger(o2, o1)){ return -1;}
        //some logic end
        if(res == 0 || !o1.equals(o2)){
            return o1.hashCode() - o2.hashCode();
        }
        return res;
    }
});

Atualização 2:

SeriaSystem.identityHashCode(x) ser melhor quehashCode() se eu não precisar de classificação estável?

questionAnswers(11)

yourAnswerToTheQuestion