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!!!