dovrei fare equals e hashcode.
la classe penso di averla fatta bene ma ho dei dubbi su questi due metodi, sono corretti?
se non lo sono, doove sbaglio?
cosa prendere in considerazione con equals?
grazie millecodice:package agendina;import java.io.*; import util.*; import string.*; import java.util.StringTokenizer; public class AgendinaVector implements Agendina{ private Vector<Nominativo> tabella; public AgendinaVector(){this(100);} public AgendinaVector(int n){ //pre: n>0 tabella=new ArrayVector<Nominativo>(n); } public int size(){return tabella.size();} public void svuota(){tabella.clear();} public void aggiungi(Nominativo nm){ //cerca indice i per inserimento di n in elenco int i=0; while(i<size() && tabella.get(i).compareTo(nm)<0) i++; //in caso esiste, sovrascrive if(i<size() && tabella.get(i).equals(nm)){ tabella.set(i,nm); return; //aggiornamento } //inserisci nm tabella.add(i,nm); } public void rimuovi(Nominativo nm){ //ricerca nell'elenco int i=Array.ricercaBinaria(tabella,nm); if(i==-1) return; tabella.remove(i); } public Nominativo cerca(Nominativo nm){ int i=Array.ricercaBinaria(tabella, nm); if(i==-1) return null; return tabella.get(i); } public Nominativo cerca(String prefisso, String telefono){ for(int i=0; i<tabella.size(); i++){ Nominativo nm=tabella.get(i); if(nm.getPrefisso().equals(prefisso) && nm.getTelefono().equals(telefono)) return nm; } return null; } public String toString(){ StringBuilder sb=new StringBuilder(500); for(int i=0; i<tabella.size(); i++) sb.append(tabella.get(i)+"\n"); return sb.toString(); } public void salva(String nomeFile) throws IOException{ PrintWriter pw=new PrintWriter(new FileWriter(nomeFile)); for(int i=0; i<tabella.size(); i++) pw.println(tabella.get(i)); //si sfrutta toString nominativo pw.close(); } public void ripristina(String nomeFile) throws IOException{ tabella.clear(); BufferedReader br=new BufferedReader(new FileReader(nomeFile)); String linea=null; StringTokenizer st=null; String cog, nom, pre, tel; for(;;){ linea=br.readLine(); if(linea==null) break; st=new StringTokenizer(linea, "-"); cog=st.nextToken(); nom=st.nextToken(); pre=st.nextToken(); tel=st.nextToken(); Nominativo n=new Nominativo(cog,nom,pre,tel); this.aggiungi(n); } br.close(); } 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; } }

Rispondi quotando