ottenere il valore della stringa da HashMap a seconda del nome della chiave


123

Ho un HashMapcon varie chiavi e valori, come posso ottenere un valore?

Ho una chiave nella mappa chiamata my_code, dovrebbe contenere una stringa, come posso ottenerla senza dover scorrere la mappa?

Finora ho ...

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

Mi aspetto di vedere un String, come "ABC" o "DEF", dato che è quello che ho inserito inizialmente, ma se lo faccio System.out.println()ottengo qualcosa di similejava.lang.string#F0454

Scusa, non ho molta familiarità con le mappe come probabilmente puoi intuire;)

Risposte:


166

Basta usare Map#get(key)?

Object value = map.get(myCode);

Ecco un tutorial sulle mappe, potresti trovarlo utile: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Modifica: hai modificato la tua domanda con quanto segue:

Mi aspetto di vedere una stringa, come "ABC" o "DEF", poiché è quello che ho inserito inizialmente, ma se eseguo System.out.println () ottengo qualcosa come java.lang.string # F0454

Scusa, non ho molta familiarità con le mappe come probabilmente puoi intuire;)

Stai vedendo il risultato di Object#toString(). Ma la java.lang.Stringdovrebbe già avere uno implementato, a meno che non si è creato un personalizzato implementazione con una minuscola snel nome: java.lang.string. Se si tratta effettivamente di un oggetto personalizzato, è necessario eseguire l'override Object#toString()per ottenere una "stringa leggibile dall'uomo" ogni volta che si esegue un System.out.println()o toString()sull'oggetto desiderato. Per esempio:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}

1
Ovviamente, se stai creando una classe stringa personalizzata, consiglierei (1) di non farlo, poiché probabilmente non è quello che vuoi fare, e (2) se hai intenzione di farlo, NON metterlo nel java.lang spazio dei nomi.
MatrixFrog

1
se HashMap <String, String> newMap = new HashMap <String, String> (); come ottenere l'elemento stringa da questo ...? dove String value = newMap.get ("my_code"); dà errore
saidesh kilaru

come puoi invertire? ottenere la chiave dal valore?
consegna il

58

Se stai memorizzando chiavi / valori come stringhe, funzionerà:

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

La domanda è cosa viene popolato nella HashMap (chiave e valore)


se HashMap <String, String> newMap = new HashMap <String, String> (); come ottenere l'elemento stringa da questo ...? dove String value = newMap.get ("my_code"); dà errore
saidesh kilaru

11

Se utilizzerai Generics e definirai la tua mappa come

Map<String,String> map = new HashMap<String,String>();

quindi recuperare il valore come

 String s = map.get("keyStr"); 

non ti verrà richiesto di digitare il map.get () o chiamare il metodo toString per ottenere il valore String


9

La tua domanda non è affatto chiara, temo. Una chiave non ha un "nome"; non è "chiamato" nulla per quanto riguarda la mappa - è solo una chiave e verrà confrontata con altre chiavi. Se hai molti tipi diversi di tasti, ti consiglio caldamente di inserirli in mappe diverse per motivi di sanità mentale.

Se questo non aiuta, chiarisci la domanda, preferibilmente con del codice per mostrare cosa intendi.



6

Un punto importante da notare qui è che se la tua chiave è un oggetto della classe definita dall'utente in java, rendilo un punto per sovrascrivere il metodo equals. Perché il metodo HashMap.get (Object key) utilizza il metodo equals per la corrispondenza del valore della chiave. Se non sovrascrivi il metodo uguale, proverà a trovare il valore basandosi semplicemente sul riferimento della chiave e non sul valore effettivo della chiave, nel qual caso restituirà sempre un valore nullo.


gr8 spiegazione mam :)
eLemEnt

3

Supponi di aver dichiarato HashMap come: -

HashMap<Character,Integer> hs = new HashMap<>();

Quindi, la chiave nella mappa è di tipo Carattere tipo di dati e il valore di tipo int. Ora, per ottenere il valore corrispondente alla chiave indipendentemente dal tipo di chiave, tipo di valore, la sintassi è: -

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

Quindi, in base alla tua domanda, vuoi ottenere il valore della stringa corrispondente a una chiave. Per questo, dichiara HashMap come HashMap <"datatype of key", "datatype of value" hs = new HashMap <> (); Usarlo renderà il tuo codice più pulito e inoltre non dovrai convertire il risultato di hs.get ("my_code") in stringa poiché per impostazione predefinita restituisce il valore di stringa se al momento dell'ingresso si è mantenuto il valore come stringa.


1

Questo è un altro esempio di come utilizzare le funzioni keySet (), get (), values ​​() e entrySet () per ottenere chiavi e valori in una mappa:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

È possibile utilizzare il metodo get (Object key) da HashMap. Tieni presente che in molti casi la tua classe chiave dovrebbe sovrascrivere il metodo uguale, per essere una classe utile per una chiave mappa.


0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

Il valore mappato alla chiave 4èDD

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.