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