Znalazłem ten komentarz na can StringBuffer objects be keys in TreeSet in Java?Czy potrzebuję metody equals i Hashcode, jeśli moja klasa implementuje porównywalną w Javie?
„Istnieją 2 określa strategie stosowane z Map w Java (bardziej lub mniej)
Hashing. Wejście«Foo»przekształca się w Best-as- możliwa próba wygenerowania liczby, która unikalnie uzyskuje dostęp do indeksu do tablicy (Purists, proszę nie nadużywajcie mnie, celowo upraszczam) .Ten indeks jest tam, gdzie przechowywana jest twoja wartość. Istnieje prawdopodobieństwo, że "Foo" i "Pasek" faktycznie generuje tę samą wartość indeksu, co oznacza, że oba byłyby odwzorowane na tę samą pozycję tablicy Oczywiście to nie może działać, a więc w tym miejscu pojawia się metoda "równa()", która służy do rozróżnienia
Porównanie: Korzystając z metody porównawczej, nie potrzebujesz tego dodatkowego etapu ujednoznacznienia, ponieważ porównanie NIGDY nie powoduje kolizji w pierwszej kolejności. Jedynym kluczem, z którym "Foo" jest równy, jest "Foo". Naprawdę dobrym pomysłem jest jednak, jeśli możesz zdefiniować "equals()" jako compareTo() == 0; dla zachowania spójności. . Nie jest to wymóg”
moje pytanie brzmi następująco: jeśli moja klasa implementuje porównywalne, wtedy to znaczy, że nie trzeba zastąpić równych i metody hashcode za korzystanie z moich przedmiotów jak klucze w zbiorach Hash np
class Person implements Comparable<Person> {
int id;
String name;
public Person(int id, String name) {
this.id=id;
this.name=name;
}
public int compareTo(Person other) {
return this.id-other.id;
}
}
.
teraz mogę wykorzystać moje przedmioty osoba w kolekcjach Hashable?
Czy próbowałeś? –