У меня возникли проблемы с написанием метода hashCode()
для созданного мной класса. Этот класс предназначен для использования внутри TreeSet, и, таким образом, он реализует Comparable. Класс имеет следующие переменные:
public class Node implements Comparable<Node> {
Matrix matrix;
int[] coordinates= new int[2];
Node father;
int depth;
int cost;
Здесь выполняется реализация метода compareTo()
. Я хочу, чтобы TreeSet
организовал эти структуры Node по их стоимости, поэтому compareTo()
возвращает результат простого вычитания.
public int compareTo(Node nodeToCompare) {
return this.cost - nodeToCompare.cost;
}
Я также реализовал метод 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);
}
Сказав все это, у меня есть несколько вопросов:
- Поскольку я реализовал новый метод
equals()
, должен ли я реализовать новый методhashCode()
? - Как я могу реализовать новый хэш-код
method()
с этими переменными? (Обратите внимание, что переменная матрица типа Matrix имеет реализованный методhashCode()
)
Что все!