Tengo problemas para escribir un método hashCode()
para una clase que creé. Esta clase está destinada a ser utilizada dentro de un TreeSet, y como tal, implementa Comparable. La clase tiene las siguientes variables:Creando un método hashCode() - Java
public class Node implements Comparable<Node> {
Matrix matrix;
int[] coordinates= new int[2];
Node father;
int depth;
int cost;
Aquí está la implementación del método compareTo()
. Quiero que TreeSet
organice estas estructuras de nodo por su costo, por lo tanto, compareTo()
devuelve el resultado de una simple resta.
public int compareTo(Node nodeToCompare) {
return this.cost - nodeToCompare.cost;
}
También he implementado un método equals()
.
public boolean equals(Object objectToCompare) {
if(objectToCompare== this) {return true;}
if(objectToCompare== null || objectToCompare.getClass()!= this.getClass()) {return false;}
Node objectNode= (Node) objectToCompare;
return this.father.equals(objectNode.father) &&
this.depth== objectNode.depth &&
this.cost== objectNode.cost &&
this.matrix.equals(objectNode.matrix) &&
Arrays.equals(this.coordinates, objectNode.coordinates);
}
Una vez dicho todo esto, tengo un par de preguntas:
- Desde que puso en práctica un nuevo método
equals()
, debo poner en práctica un nuevo métodohashCode()
? - ¿Cómo puedo implementar un nuevo hashCode
method()
con esas variables? (Tenga en cuenta que la matriz de variables del tipo Matrix tiene implementado un métodohashCode()
)
¡Eso es todo!
Pero si cambio el método compareTo, ¿eso no cambiará la forma en que se organizan las cosas en un TreeSet? –
@ GonçaloLourenço: Sí. Ese es mi punto; en este momento, si 'n1.cost == n2.cost', entonces' TreeSet' que contiene 'n1' no puede contener' n2'. ¿Es eso realmente lo que quieres? – ruakh
Definitivamente no. Supongo que tendré que usar algo más en lugar de TreeSet. Como usted fue el primero en responder mi pregunta, marcaré su respuesta como la correcta. ¡Gracias por toda la ayuda! –