Writing Your Own Comparable Types

1 resposta
A

Olá Pessoal andei lendo o tutorial em java sobre como ordenar uma lista:

http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html

O que entendi até agora foi que classes como por exemplo a String e a Date já implemetam a Interface Comparable,
que possui apenas um método:

The Comparable interface consists of the following method.

public interface Comparable<T> {
    public int compareTo(T o);
}

Caso eu tenha uma lista de String a ordenação será feita em ordem alfabética, mas caso eu tenha uma lista de objetos que não implementa a Interface
Comparable será gerada uma ClassCastException.

Então temos que implementar o método da Comparable e definir como será a maneira de classificar, como por exemplo o método do exemplo do tutorial

public int compareTo(Name n) {
        int lastCmp = lastName.compareTo(n.lastName);
        return (lastCmp != 0 ? lastCmp :
                firstName.compareTo(n.firstName));
    }

O que eu entendi acima foi que caso o sobrenome seja igual a classificação fica sendo para os sobrenomes, mas caso haja sobrenomes iguais a classificação
passa a ser pelo primeiro nome.

A minha dúvida é:

Eu não entendo porque no exemplo do tutorial ele teve que implementar os métodos:

public boolean equals(Object o) {
        if (!(o instanceof Name))
            return false;
        Name n = (Name)o;
        return n.firstName.equals(firstName) &&
               n.lastName.equals(lastName);
    }

    public int hashCode() {
        return 31*firstName.hashCode() + lastName.hashCode();
    }

Não entendo o motivo desses métodos estarem implementados ?
E principalmente o que faz o método hashCode()

Caso alguém possa me ajudar ficarei grato!!!

1 Resposta

renamed

Esse texto é bom, embora esteja em inglês: http://www.ibm.com/developerworks/java/library/j-jtp05273.html

Dê uma lida aqui tmb: http://www.guj.com.br/posts/list/121939.java#659830

Criado 7 de fevereiro de 2010
Ultima resposta 7 de fev. de 2010
Respostas 1
Participantes 2