Quote Originariamente inviata da DarkPassenger Visualizza il messaggio
codice:
	public boolean equals(Object x){
		if(!(x instanceof AgendinaVector))
			return false;
		if(x==this)
			return true;
		AgendinaVector av=(AgendinaVector)x;
		if(this.size()!=av.size())
			return false;
		for(int i=0; i<size(); i++)
			if(tabella.get(i).equals(x))
				return false;
		return true;
	}
	
	public int hashCode(){
		final int MOLT=41;
		int h=0;
		for(int i=0; i<size(); i++)
			h=h*MOLT+tabella.get(i).hashCode();
		return h;
	}
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.