Ho trovato questo commento su can StringBuffer objects be keys in TreeSet in Java?Ho bisogno di un metodo di equals e Hashcode se la mia classe implementa comparabili in Java?
"Ci sono 2 strategie identificativi utilizzati con mappe delle città in Java (più o meno)
hashing:. Un ingresso 'Pippo' è convertito in un best-come- possibile tentativo di generare un numero che accede in modo univoco a un indice in un array. (Puristi, per favore non abusare di me, sto intenzionalmente semplificando) .Questo indice è dove il tuo valore è memorizzato. C'è la possibilità probabile che "Foo" e "Bar" in realtà genera lo stesso valore di indice, il che significa che sarebbero entrambi mappati sulla stessa posizione dell'array. Ovviamente questo non funziona e quindi è qui che entra in gioco il metodo "equals()", usato per disambiguare
Confronto: utilizzando un metodo comparativo non è necessario questo passaggio di disambiguazione in più perché il confronto MAI produce questa collisione in primo luogo. L'unica chiave che "Foo" è uguale a "Foo". Una buona idea è se è possibile definire "equals()" come compareTo() == 0; per coerenza. . Non è un requisito"
la mia domanda è la seguente: se la mia classe implementa paragonabile, allora cosa significa non devo sovrascrivere equals e metodo di codice hash per l'utilizzo di miei oggetti come chiavi in collezioni Hash per esempio
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;
}
}
.
Ora, posso usare i miei oggetti Person in collezioni hashable?
Hai provato? –