hashCode() è tecnicamente corretto. equals() no ma più che altro perché hai scritto erroneamente
if(tabella.get(i).equals(x))
Che è sbagliato almeno per 2 motivi:
- x è il AgendinaVector esterno mentre tabella.get(i) dà un Nominativo, quindi stai confrontando patate con carote ...
- se sono uguali restituisci false. No, se fossero diversi, allora devi ritornare false!
Se non ci fossero questi errori, allora strutturalmente e tecnicamente sarebbe corretto.
Tuttavia quanto hai scritto è comunque troppo. Giusto come consiglio: quando nelle tue classi usi oggetti di classi del framework o di altre librerie, verifica con la documentazione javadoc il equals/hashCode di queste classi!
Infatti per Vector equals/hashCode sono già validi e buoni. Quindi molto più semplicemente:
codice:public boolean equals(Object x){ // .... test di precondizioni .... AgendinaVector av=(AgendinaVector)x; return tabella.equals(av.tabella); } public int hashCode(){ return tabella.hashCode(); }
E potrei dirti ad occhi chiusi che è corretto.
P.S. comunque, per come l'avevi scritto tu, non avresti dovuti usare il tuo size() ma quello di tabella. Perché? Perché il tuo size() è vero che usa il size() di tabella ma il tuo size è pubblico e potrebbe essere ridefinito in una sottoclasse e il significato potrebbe cambiare.



Rispondi quotando