Se eseguo il codice seguente, l'uscita è 2, il che significa che il set contiene 2 elementi. Tuttavia, ritengo che il set debba contenere 1 poiché entrambi gli oggetti sono uguali in base al valore hashcode() e al metodo .equals()
. Sembra un errore evidente nella mia comprensione?Java: oggetti duplicati vengono aggiunti al set?
package HELLO;
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) throws Exception {
Set<Alpha> s = new HashSet<Alpha>();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
s.add(a1);
s.add(a2);
System.out.println(s.size());
}
}
class Alpha {
int a = 10;
public int hashcode() {
return a;
}
public boolean equals(Object obj) {
return (obj instanceof Alpha && ((Alpha) obj).a == this.a);
}
public String toString() {
return "Alpha : " + a;
}
}
Grazie! Non dimenticherò mai più di usare @Override :) –
@snow_leopard: è una grande abitudine entrare. In bocca al lupo! –
Oltre a "@Override" dovevo aggiungere anche una riga nella funzione equals, altrimenti l'insieme non era in grado di rilevare duplicati e conteneva sempre un oggetto con lo stesso contenuto più volte: if (this.hashCode() == msg. hashCode()) return true; –