Przeciążanie metod: equals,hashcode,compareTo

0

Mam taki swój kod, nie działa niestety:
public class Node implements Comparable<Object> {
public Node(){

}
public Node(int wartosc){
    this.wartosc = wartosc;
}
public Node(Node korzen, int wartosc) {
    this.korzen = korzen;
    this.wartosc = wartosc;
}
public Node korzen, left_son, right_son, rodzic;
Node element;
int wartosc;

// @Override
// public boolean equals(Object obj) {
// if (obj instanceof Node) {
// if (obj == this) {
// return true;
// }
// Node other = (Node) obj;
// return other.wartosc == wartosc ;
// }
// return false;

  •    *return super.equals(obj);
    

// }
// @Override
// public int hashCode() {
// return super.hashCode();
// }

public int compareTo(Object o) {
    final int BEFORE = -1;
    final int EQUAL = 0;
    final int AFTER = 1;
    if (this == o) return EQUAL;
    final Node that = (Node)o;
    if (this.wartosc < that.wartosc) return BEFORE;
    if (this.wartosc > that.wartosc) return AFTER;
    return EQUAL;
    //throw new UnsupportedOperationException("Not supported yet.");
}

}

Potrzebuje mieć możliwość porównywania takich obiektów pod względem pola 'wartosc'. Do końca niewiem jak przeciążyć te metody?
I w jakim celu jest konieczne przeciążenie obu metod: equals i hashcode ?

0
  1. Powinieneś implementować Comparable<Node>, bo chcesz porównywać tylko z Node'ami - jest to opisane w Javadoc tego interfejsu.

  2. hashCode i equals powinny być zgodne w tym sensie, że jeśli o1.equals(o2) to o1.hashCode() == o2.hashCode(), o1.equals(o2) powinno zachodzić wtedy i tylko wtedy, gdy o2.equals(o1) - o tym jest w Javadocu klasy Object.

Interfejsu Comparable używają np standardowe metody sortujące.

Od dobrej implementacji hashCode zależy np wydajność HashMapy czy HashSeta. W przypadku Map i Setów jeśli dodajesz element, który ma odpowiednik w tym Secie (tzn dla tych dwóch obiektów zachodzi equals()) to ten stary jest zastąpiony tym nowym.

NetBeans potrafi wygenerować automatycznie poprawny hashCode - o ile oczywiście wszystkie hashowane składowe są poprawne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1