Gerando um java hashcode correto

java hashcode é um dos métodos que mais escovam a cabeça Gera programadores.

public boolean hashCode();

O método é usado em combinação com o método igual para comparar no nível de negócio quando dois objetos de uma classe são idênticos. A implementação é sempre muito mais fácil de entender.

java hashcode

Este método existe para melhorar o desempenho do Java ao comparar dois objetos. Como dois objetos têm diferentes hashcodes não podem mais ser os mesmos e é sobre fazer uma simples comparação entre números inteiros. Os problemas surgem sobre como gerar os hashcodes, uma vez que a estrutura de coleta a usa para projetar as estruturas internas de seus tipos de dados abstratos. No exemplo a seguir, a classe da pessoa com o método de substituição de iguais (substituição) é mostrada para que dois objetos sejam iguais se o nome e o sobrenome coincide. O método é mais ou menos compreensível.

package com.arquitecturajava;public class Persona {private String nombre;private String apellidos;public String getNombre() {return nombre;}public void setNombre(String nombre) {this.nombre = nombre;}public String getApellidos() {return apellidos;}public void setApellidos(String apellidos) {this.apellidos = apellidos;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Persona other = (Persona) obj;if (apellidos == null) {if (other.apellidos != null)return false;} else if (!apellidos.equals(other.apellidos))return false;if (nombre == null) {if (other.nombre != null)return false;} else if (!nombre.equals(other.nombre))return false;return true;}}

Eclipse Java HashCode

O método acima foi gerado com as refatores do Eclipse. Da mesma forma, o hashcode pode ser gerado.

public int hashCode() {final int prime = 31;int result = 1;result = prime * result+ ((apellidos == null) ? 0 : apellidos.hashCode());result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());return result;}

Este método não é mais tão simples de entender. Isso ocorre porque os hashcodes devem ter uma certa variabilidade. Isto é, se todos os objetos gerarem o mesmo hashcode (), isso não vale a pena melhorar o desempenho nas comparações, pois todos geram o mesmo e o método igual será sempre usado ao executá-los.

javahashcode

do outro lado se todos os objetos geram hashcodes diferentes, será impossível agitá-los dentro dos diferentes tipos de coleções de maneira ideal. / P>

javahashcodecorecto

java hashcode correto

portanto, geralmente o eclipse é responsável por projetar seu próprio método de hashcode através do Uso de números primos. No entanto, há outra opção muito mais elegante e simples para gerá-los. A Java API tem uma classe de objetos no pacote de utilitários que gera hashcodes.

@Override public int hashCode() { // TODO Auto-generated method stub return Objects.hash(nombre,apellidos); }

Desta forma, vamos esquecer o problema que este método gera em programadores.

Outros artigos relacionados: Compreender iguais e hashcode, Java == vs é igual a

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *