Recuerdo eclipse y la idea tiene esta plantilla para crear automáticamente hashCode de un objeto en función de sus atributos.Crear hash desde cadena e int
Una de las estrategias para usar un número y una cadena es algo como esto.
return stringValue.hashCode() + intValue * 32;
Ooor algo así como eso.
No tengo eclipse ni idea y me gustaría crear esa función.
EDITAR
Sobre la base de las respuestas que crean este mini-clase
class StringInt {
private final String s;
private final int i;
static StringInt valueOf(String string , int value) {
return new StringInt(string, value);
}
private StringInt(String string, int value) {
this.s = string;
this.i = value;
}
public boolean equals(Object o) {
if(o != null && o instanceof StringInt){
StringInt other = (StringInt) o;
return this.s == other.s && this.i == other.i;
}
return false;
}
public int hashCode() {
return s != null ? s.hashCode() * 37 + i : i;
}
}
Esta clase es para ser utilizado como clave para un gran mapa de memoria (> 10 k elementos) no lo hago desea iterarlos cada vez para encontrar si el String y el int son iguales.
Gracias.
ps .. mmh probablemente deberían ser los nombres StringIntKey.
Oscar, creo que es una buena clase. El método hashCode es claro, confiable y eficiente. ¿Qué pasa si evitamos que la cadena sea nula? En tu constructor, lanza un NPE si es nulo. Entonces podrías eliminar esos guardias nulos en iguales y hashCode. Finalmente, tenga a mano una copia de "Java efectivo" para preguntas como estas. Los métodos hashCode creados por Eclipse e IDEA se basan en ese libro. –
En su método equals debería estar comparando el uso de cadenas iguales en lugar de ==. –