Probabilmente una matrice non è una buona opzione, dal momento che non si vuole dover scorrere su di essa per trovare il giusto valore. Se hai molte tuple, il tempo necessario per determinare l'e-mail associata a un nome può diventare importante. Se raddoppi il numero di nomi, puoi aspettarti che ti occorra anche il doppio del tempo.
Hashtables e HashMap sono simili, ma le tabelle offrono un accesso sincronizzato ai loro valori e sono quindi thread-safe. Di conseguenza, dovrebbe privilegiare HashMap su Hashtable se non è necessario una tale sicurezza del battistrada.
Ancora meglio, non ti interessa davvero HashMap. Tutto ciò che vuoi è una struttura che ti permetta di trovare molto velocemente il valore associato a una chiave. Questo è l'aspetto per cui è stata progettata l'interfaccia della mappa. HashMap è un'implementazione di Map.
Una soluzione semplice sembra memorizzare le tuple come voci di mappe e usare questa mappa come tabella di associazione.
Consideriamo che hai una classe Tuple con due proprietà nome e email .
Map<String, String> associationTable = new HashMap<>();
for(tuple : myTuples){
associationTable.put(tuple.name, tuple.email);
}
Dopodiché, se vuoi tutti i tuoi nomi (ad esempio, per popolare uno spinner), basta chiedere:
Set<String> myNames = associationTable.keySet();
E se vuoi che l'email sia associata a un nome specifico:
String email = associationTable.get(name);
HashMap si basa su una tabella hash, una struttura che offre prestazioni costanti per le operazioni di inserimento e recupero (se le tue chiavi hanno una buona funzione di hash). Quindi, in pratica, "istantaneamente" ricevi l'email associata al nome, indipendentemente dal numero di tuple nella tua struttura.
Le mappe possono avere nomi diversi in altre lingue: dizionari, tabelle di associazione, tabelle hash, ecc.
Se è richiesta la sicurezza del filo, esistono diverse alternative. Vedi ad esempio questo altro post per un confronto.