Escolar Documentos
Profissional Documentos
Cultura Documentos
09 Capitulo03
09 Capitulo03
Equivalncia de tipos primitivos Equivalncia de String Equivalncia de outros objetos O mtodo equals() O mtodo hashCode() A interface Comparable e o mtodo compareTo()
Equivalncia de Strings
Para verificar a equivalncia de outros tipos de objetos tambm utilizamos o mtodo equals()
Funcionario f1 = new Funcionario(1021, "Joo", "Vendedor", 1815.5); Funcionario f2 = new Funcionario(.......); if (f1.equals(f2)) { System.out.println("Funcionarios iguais"); } else { System.out.println("Funcionarios diferentes"); }
5
O mtodo equals()
Um dos mtodos derivados da superclasse Object Deve ser reimplementado (sobrescrito) pelo programador conforme necessidade da aplicao
clone() equals(Object) finalize() getClass() hashCode() notify() notifyAll() toString() wait() wait(long) wait(long, int)
Leis de igualdade
Ao implementar o mtodo equals(), certifique-se de atender as 4 leis de igualdade. Para isto seu mtodo equals() deve ser:
Simtrico Reflexivo
Transitivo
Consistente
Lei da simetria
O mtodo equals() precisar ser simtrico. Isto significa que a regra abaixo sempre deve ser verdadeira para qualquer instncia de sua classe:
Lei da reflexividade
O mtodo equals() precisar ser reflexivo. Isto significa que as expresses abaixo precisam ser equivalentes:
objetoA.equals(objetoB)
objetoB.equals(objetoA)
10
Lei da transitividade
objetoA.equals(objetoB) e objetoB.equals(objetoC)
objetoA.equals(objetoC)
11
Lei da consistncia
O mtodo equals() precisar ser consistente. Isto significa que chamadas sucessivas do mtodo equals() no devem alterar o seu resultado.
objetoA.equals(objetoB) objetoA.equals(objetoB) objetoA.equals(objetoB) ... objetoA.equals(objetoB)
12
O mtodo hashCode()
Outro mtodo derivado da superclasse Object Tambm deve ser reimplementado (sobrescrito) pelo programador conforme necessidade da aplicao
clone() equals(Object) finalize() getClass() hashCode() notify() notifyAll() toString() wait() wait(long) wait(long, int)
13
O mtodo hashCode()
Juntamente com o mtodo equals(), o mtodo hashCode() utilizado para diferenciar um objeto de outro em estruturas de dados que no permitem repetio.
equals()
Diferencia um objeto de outro impedindo duplicidade em estruturas sem repetio.
hashCode()
Retorna um nmero inteiro utilizado como identificador nico do objeto instanciado.
14
O mtodo hashCode()
Devemos nos preocupar em implementar o mtodo hashCode() ao criar classes cujas instncias sero utilizadas em estruturas de dados como listas, mapas, conjuntos, etc. Ao implementar o mtodo hashCode() em uma classe, geralmente pegamos carona com o hashCode de cada um de seus membros para que possamos gerar um ID que dependa de cada um de seus atributos.
15
public int hashCode() { int hash = 1; hash = 31 * hash + matricula; hash = 31 * hash + (nome == null ? 0 : nome.hashCode()); hash = 31 * hash + (cargo == null ? 0 : cargo.hashCode()); return hash; }
}
16
A interface Comparable
Assinala um critria de comparao entre objetos, permitindo definir se um objeto maior ou menor que um outro Deve ser implementado em classes cujas instncias sero utilizadas em estruturas de dados ordenveis.
17
Para comparar valores primitivos utilizamos os operadores relacionais > (maior), < (menor) e outros
int x = 8; int y = 4 + 6;
if (x > y) { System.out.println(O primeiro valor maior."); } else if (x < y) { System.out.println(O segundo valor maior."); } else { System.out.println("Valores iguais."); }
18
Comparando Strings
Para realizar a comparao de outros tipos de objetos tambm utilizamos o mtodo compareTo()
Funcionario f1 = new Funcionario(1021, "Joo", "Vendedor", 1815.5); Funcionario f2 = new Funcionario(.......); if (f1.compareTo(f2) > 0) { System.out.println(O primeiro funcionario maior"); } else if (f1.compareTo(f2) < 0) { System.out.println(O segundo funcionario maior"); } else { System.out.println("Funcionarios iguais"); }
20
21
Exerccio
Implemente os mtodos get e set para cada um destes atributos Implemente o mtodo equals() realizando a comparao pela descrio do produto. Em outras palavras, dois produtos sero iguais quando possurem a mesma descrio.
23
Exerccio (continuao)
A classe Produto dever implementar a interface Comparable<Produto> bem como seu mtodo compareTo() realizando a comparao tambm pela descrio em ordem crescente.
questo for alfabeticamente maior que a descrio do outro produto Um nmero negativo quando contrrio Zero quando tiverem a mesma descrio
24
Exerccio (fim)
Crie um classe executvel chamada ExercicioComparable e no mtodo main() crie 3 instncias da classe produto conforme abaixo:
Produto p1 = new Produto(805, Leite Integral, 1.70); Produto p2 = new Produto(930, Caf em p, 4.80); Produto p3 = new Produto(110, Manteiga, 2.80);
Em seguida, exiba cada um dos produtos conforme a ordem definida pelo mtodo compareTo() de cada objeto.
25