-Slash
21-07-2011, 18:40
Ragazzi vi giuro che sto impazzendo per una cosa che probabilmente è stupidissima. Ho una classe Iscritti che ha solo due campi nome e cognome di tipo string, e voglio fare una linkedlisk di Iscritti, per poter usare poi i metodi add e compare.
Ho ridefinito quindi le funzioni equals e hashCode della classe in questo modo
public boolean equals(Object o)
{
Iscritto b = (Iscritto)o;
return ((this.nome == b.nome) && (this.cognome == b.cognome));
}
public int hashCode()
{
return (this.nome.hashCode() + this.cognome.hashCode());
}
Ho provato a creare una linkedlist di Iscritti in una classe di prova stupida e la funzione contains funziona perfettamente. Nel momento in cui uso il codice in una mia applicazione corba contains mi restituire sempre false. L'applicazione è corretta perchè usando Vector funziona tranquillamente (ma ci vuole molto più codice)...
La cosa strana è che nella funzione che richiama contains stampo prima tutto il contenuto della lista (per semplicità l'ho riempita con un solo elemento) e poi l'elemento che sto cercando e coincidono, ma mi viene ritornato false!! Posto il codice:
public synchronized boolean checkIscrizione(Iscritto x)
{
Iscritto y = new Iscritto(x.nome.trim(), x.cognome.trim());
System.out.println("Presente in lista " + iscritti.get(0).nome + " " +iscritti.get(0).cognome) ;
boolean result = iscritti.contains(y);
System.out.println("Sto cercando " + x.nome + " " + x.cognome + " " + result);
return result;
}
Ho messo i trim per verificare che eventualmente non ci fossero degli spazi aggiuntivi ma non funziona anche senza...
Mi restituisce il seguente risultato:
Presente in lista C1 C1
Sto cercando C1 C1 false
:confused: :confused: :confused: :confused: :confused:
Ho ridefinito quindi le funzioni equals e hashCode della classe in questo modo
public boolean equals(Object o)
{
Iscritto b = (Iscritto)o;
return ((this.nome == b.nome) && (this.cognome == b.cognome));
}
public int hashCode()
{
return (this.nome.hashCode() + this.cognome.hashCode());
}
Ho provato a creare una linkedlist di Iscritti in una classe di prova stupida e la funzione contains funziona perfettamente. Nel momento in cui uso il codice in una mia applicazione corba contains mi restituire sempre false. L'applicazione è corretta perchè usando Vector funziona tranquillamente (ma ci vuole molto più codice)...
La cosa strana è che nella funzione che richiama contains stampo prima tutto il contenuto della lista (per semplicità l'ho riempita con un solo elemento) e poi l'elemento che sto cercando e coincidono, ma mi viene ritornato false!! Posto il codice:
public synchronized boolean checkIscrizione(Iscritto x)
{
Iscritto y = new Iscritto(x.nome.trim(), x.cognome.trim());
System.out.println("Presente in lista " + iscritti.get(0).nome + " " +iscritti.get(0).cognome) ;
boolean result = iscritti.contains(y);
System.out.println("Sto cercando " + x.nome + " " + x.cognome + " " + result);
return result;
}
Ho messo i trim per verificare che eventualmente non ci fossero degli spazi aggiuntivi ma non funziona anche senza...
Mi restituisce il seguente risultato:
Presente in lista C1 C1
Sto cercando C1 C1 false
:confused: :confused: :confused: :confused: :confused: