Domanda

Sto lavorando su un progetto che mi comporta l'uso di un HashSet di una classe che ho fatto, che io farò il nome Test. Ho definito il dichiarato HashSet in questo modo:

HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

Ho provato ad utilizzare

t.contains(new Test("asdf", 1));

ma restituisce false. Tuttavia, quando uso un HashSet<Character> sembra funzionare bene. Ho provato ignorando la dichiarazione equals precedente, ma non ha funzionato. Ho provato lasciandolo solo equals, ma ho ancora avuto false. Ho bisogno di sapere che cosa sto facendo male?

Inoltre, non ho modificare la funzione di hash, ho cambiato solo Test.equals (Object o). E 'un progetto semplice e dal momento che la documentazione java afferma che utilizza o.equals (questo), ho pensato che non avrei dovuto.

È stato utile?

Soluzione

Potrebbe essere necessario sovraccaricare il metodo hashCode () pure.

Altri suggerimenti

HashSet.add(Object data) non è uguale a HashSet.add(new Test(String, int))

Prova ad usare HashSet.add(new Test("asdf", 1));. E fare le sostituzioni dal metodo di hashCode(). Il vostro codice di compilazione?

Il tuo codice non sarà nemmeno la compilazione ...

HashSet non ha un metodo add (), che accetta due argomenti.

Se vuoi dire

t.add(new Test("asdf", 1));

al posto di

t.add("asdf", 1);

essere sicuri che il codice hash e uguale metodo della classe di test sono implementate correttamente, come detto prima.

Internamente una tabella hash utilizzerà Object # hashCode (), hash e benna gli oggetti, e Object # equals () per verificare l'uguaglianza se ci sono scontri hashCode. È necessario assicurarsi che la classe di test fornisce implementazioni adatti (overrrides) questi, nel tuo caso per verificare l'uguaglianza di stringa, altrimenti di default Object # metodo Equals () utilizzerà l'identità degli oggetti istanza (ref id). Vedere qui per un tutorial su questo argomento .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top