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?
codice:
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;
}
}
grazie mille