Questa è la mia prima volta che uso questo sito, quindi mi scuso se non lo sto usando correttamente. Per favore fatemi sapere.Sovrascrittura hash
In ogni caso, ho un oggetto Account che accetta 2 stringhe ... Un acctName e lastName (il codice è sotto).
Voglio inserire questo oggetto in una tabella hash con la chiave come acctName e vorrei usare i polinomi per ridurre la collisione. Ho sentito che devo scavalcare hashCode() e metodo uguale. Credo di averlo scavalcato correttamente ma non sono sicuro che sia corretto perché sembra non essere chiamato. Qualcuno può dirmi se sto facendo questo correttamente (Override nella giusta posizione e aggiungendo correttamente) e spiegami come stampare dopo un add?
Grazie e non vedo l'ora di contribuire alla comunità in futuro!
Class ---> Account
public class Account
{
private String acctName;
private String lastName;
public Account(String acctName, String lastName)
{
this.acctName= acctName;
this.lastName= lastName
}
@Override
public int hashCode() {
return acctName.hashCode() + lastName.hashCode();
}
@Override
public boolean equals (Object otherObject) {
if (!(otherObject instanceof Account)) {
return false;
}
if (otherObject == this) {
return true;
}
Account accountHolder = (Account) otherObject;
return acctName.equals(accountHolder.acctName) && lastName.equals(accountHolder.lastName);
}
Class ----> driver
public void insertInto()
{
Hashtable<String,Account> hash=new Hashtable<String,HoldInformation>();
Account account= new Account ("Deposit", "Jones");
Account account2= new Account ("Withdraw", "Smith");
hash.put ("deposit", account);
hash.put ("Withdraw", account2);
}
Modifica con GETTER ALL'INTERNO account oggetto
public String testGetter()
{
return acctName.hashCode() + lastName.hashCode();
}
Ah ha un senso, il mio problema è che il mio oggetto account prende acctName e cognome in un unico oggetto. Come ho detto, l'acctName è la chiave. Quindi cosa posso usare per il campo chiave quando dichiaro l'hashtable se ho tutto ciò di cui ho bisogno all'interno dell'oggetto Account? – michael
O dovrei inserire tutto nell'oggetto Account anziché nel driver? Grazie! – michael
aggiungi un metodo getter nella tua classe per cui verrà restituito "" acctName.hashCode() + lastName.hashCode(); "". Quindi utilizzare il valore restituito come chiave della tabella hash. –