Xerando un Hashcode Java Correcto

Táboa de contidos

Java Hashcode é un dos métodos que a maioría das cepillas Xera programadores.

public boolean hashCode();

O método úsase en combinación co método equivalente para comparar a nivel comercial cando dous obxectos dunha clase son idénticos. A implementación equivalente é sempre moito máis fácil de entender.

Java Hashcode

Este método existe para mellorar o rendemento de Java ao comparar dous obxectos. Dado que dous obxectos teñen códigos hash diferentes xa non poden ser iguais e trata de facer unha comparación sinxela entre os números enteiros. Os problemas xorden sobre como xerar os códigos hash, xa que o marco de recollida úsea para deseñar as estruturas internas dos seus tipos de datos abstractos. No seguinte exemplo, a clase de persoa co método de substitución é igual (substitución) móstrase para que dous obxectos sexan iguais se o seu nome e apelidos coinciden. O método é máis ou menos comprensible.

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 anterior foi xerado co Refactor de Eclipse. Do mesmo xeito, pódese xerar o hashcode.

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 xa non é tan sinxelo de entender. Isto débese a que os códigos de hascodes deben ter certa variabilidade. É dicir, se todos os obxectos xeran o mesmo hashcode (), isto non vale a pena mellorar o rendemento nas comparacións xa que todos xeran o mesmo e o método é igual empregarase ao executalos.

javahashcode

do outro lado se todos os obxectos xeran códigos de hash diferentes, será imposible agruparlas dentro dos diferentes tipos de coleccións de xeito óptimo.

javahashcodecorecto

Java Hashcode Correcto

Por iso, normalmente o eclipse é responsable do deseño do seu propio método de hash Uso de números primos. Non obstante, hai outra opción moito máis elegante e sinxela de xerar. Java API ten unha clase de obxectos no paquete de servizos que xera hashcodes.

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

Deste xeito esqueceremos o problema que este método xera en programadores.

Outros artigos relacionados: comprender iguais e hashcode, java == vs é igual a

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *