studio sirven sirve respectivamente que para objetos metodo las interfaces example equal contrario comparar java hashcode

java - sirven - Implementando `hashCode()` para clases muy simples



para que sirve equals en android studio (9)

Tengo una clase muy simple con solo un miembro de campo (por ejemplo, String). ¿Está bien implementar hashCode() para simplemente devolver fieldMember.hashCode() ? ¿O debería manipular el código hash del campo de alguna manera? Además, si debería manipularlo, ¿por qué es eso?


Joshua Bloch establece cómo anular correctamente equals y hashCode en "Effective Java" Capítulo 3 .


Multiplicar, agregar o anotar cosas no lo hará más único. Matemáticamente, estaría aplicando funciones constantes a una sola variable, lo que no aumenta el número de valores posibles de la variable.

Ese tipo de técnica es útil para combinar códigos hash múltiples y aún así mantener el riesgo de colisiones relativamente pequeño; no tiene nada que ver con un solo código hash.


Por lo general, a menos que esté utilizando este objeto como la clave para * HashMap o un elemento en * HashSet, no es necesario anular hashCode ().


Sí, eso es bastante estándar. Y si la clase refleja una fila de la base de datos, simplemente devuelvo la clave principal.


Si fieldMember es una forma bastante buena de identificar de manera única el objeto, diría que sí.


Si la variable ''fieldMember'' ya implementa la función ''hashCode'', entonces puede usarla directamente desde su clase principal. Si la variable ''fieldMember'' es una instancia de clase personalizada, debe implementarla usted mismo. Lea la documentación de la API java.lang.Object como guía para implementar ''hashCode''.


Solo existen dos requisitos reales para hashCode : uno, que equals instancias que tienen los mismos códigos hash, y dos, que hashCode ejecuta razonablemente rápido. El primer requisito es el más importante en la práctica; sin eso, podrías poner algo en una colección pero no encontrarla allí. El segundo es simplemente un problema de rendimiento.

Si el algoritmo del código hash de su campo cumple con lo anterior, entonces su algoritmo también funciona para su clase, si su clase equals también depende únicamente de si esos campos son equals .


Ya. Es una buena práctica de programación. Yo normalmente uso:

devolver var ^ 1;


Como alguien más mencionó, debes seguir los consejos en Java efectivo. Si anula el método hashCode (), también debe anular el método equals (). Además, los dos métodos deben ser consistentes.

Para simplificar la escritura de buenos métodos equals () y hashCode (), uso EqualsBuilder y HashCodeBuilder de Apache Commons Lang

Aquí hay ejemplos:

public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } User other = (User) o; return new EqualsBuilder() .append(this.getUniqueId(), other.getUniqueId()) .isEquals(); } public int hashCode() { return new HashCodeBuilder() .append(this.getUniqueId()) .toHashCode(); }