TreeSet [Resolvido]

Oi pessoal

Estou com uma dúvida sobre o TreeSet. Observem:

public class Drink implements Comparable {

    public String name;

    public int compareTo(Object o) {
//        Drink d = (Drink) o;
//        return name.compareTo(d.name);
        return 0;
    }

    public static void main(String[] args) {

        Drink one = new Drink();
        Drink two = new Drink();
        one.name = "Coffee";
        two.name = "Tea";
        TreeSet set = new TreeSet();
        set.add(one);
        set.add(two);
        
        for (Object d : set){
            Drink d1 = (Drink) d;
            System.out.println( d1.name);
        }
    }
}

Neste exemplo a saída é somente Coffee, apesar de criar um Tea, ele não é adicionando na Lista. Só funciona se implementar correatmente o compareTo. Com outras lista como hashSet por exemplo funciona, notei que esse comportamento acontece com listas ordenadas (com treemap também acontece o mesmo).
Mas eu não entendi porque tem que implementar corretamente o compareTo, pois no livro diz apenas “implemente CompareTo”…
por que funciona com outras lista e com o treeset não?

abraço

HashSet / HashMap usam hashCode e equals para funcionarem. A implementação padrão de hashCode e de equals é suficiente para um HashSet funcionar se você não se incomodar de ter elementos repetidos na tabela porque você se esqueceu de definir corretamente equals. Experimente definir incorretamente equals para ver que um HashSet vai funcionar de um jeito esquisito.

TreeSet / TreeMap usa única e exclusivamente compareTo, tanto para verificar se um elemento é menor que outro, quanto para verificar se um elemento é igual a outro. Se compareTo for incorretamente especificada, o TreeSet não vai funcionar mesmo.

ok. Obrigada

Resolvido caia bem hem…

Se você ver ela até colocou, mas no último post.

as vezes o pessoal não repara que se não colocar no primeiro post não aparece na lista de tópicos hehehe.

Já vi muito isso.

pronto…