Come salvare i valori di tupla, per cercarli in seguito

0

Scenario

Ho alcuni valori del tipo: (Nome - Email)

Da questa coppia di dati, devo impostare un ArrayList di valori "Nome", qualcosa del tipo: |Name1|Name2| --- |NameN| per impostare uno Spinner. (Ordinato alfabeticamente)

Quando scelgo un nome nella casella di selezione, devo salvare l'email associata, per inviarla ad altri siti.

problema

Il mio problema è che non so come farlo.

Voglio dire, come devo salvare tutte queste tuplas, perché una volta che ho selezionato il nome, lo cerco nei dati? Che tipo di array / hashmap / hastable devo usare per salvarlo?

Forse un'immagine potrebbe aiutare un po '.

    
posta Shudy 19.02.2016 - 10:12
fonte

1 risposta

1

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.

    
risposta data 19.02.2016 - 13:18
fonte

Leggi altre domande sui tag