Mam problem z zapisem metody hashCode()
dla utworzonej przeze mnie klasy. Ta klasa jest przeznaczona do użycia w TreeSet i jako taka implementuje Porównywalne. Klasa ma następujące zmienne:Tworzenie metody hashCode() - Java
public class Node implements Comparable<Node> {
Matrix matrix;
int[] coordinates= new int[2];
Node father;
int depth;
int cost;
Tutaj jest wdrożenie metody compareTo()
. Chcę, aby TreeSet
organizował struktury węzłów według ich kosztu, dlatego też compareTo()
zwraca wynik prostego odejmowania.
public int compareTo(Node nodeToCompare) {
return this.cost - nodeToCompare.cost;
}
Zaimplementowałem również metodę 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);
}
Powiedziawszy to wszystko, mam kilka pytań:
- Odkąd wprowadził nową metodę
equals()
, należy wdrożyć nową metodęhashCode()
? - Jak mogę wdrożyć nowy kod hashCode
method()
z tymi zmiennymi? (Zwróć uwagę, że macierz zmiennej typu Matrix ma zaimplementowaną metodęhashCode()
)
To wszystko!
Ale jeśli zmienię metodę compareTo, czy to nie zmieni sposobu organizacji przedmiotów w TreeSet? –
@ GonçaloLourenço: Tak. To mój punkt; teraz, jeśli 'n1.cost == n2.cost', to' TreeSet', który zawiera 'n1', nie może zawierać' n2'. Czy to naprawdę chcesz? – ruakh
Zdecydowanie nie. Chyba będę musiał użyć czegoś innego zamiast TreeSet. Ponieważ byłeś pierwszym, który odpowiedział na moje pytanie, zaznaczę twoją odpowiedź jako właściwą. Dzięki za pomoc! –