web-dev-qa-db-fra.com

Obtenir la clé d'un HashMap en utilisant la valeur

Je veux obtenir la clé d'un HashMap en utilisant la valeur.

hashmap = new HashMap<String, Object>();

haspmap.put("one", 100);
haspmap.put("two", 200);

Ce qui signifie que je veux une fonction qui prendra la valeur 100 et renverra la chaîne.

Il semble que beaucoup de questions posent la même chose, mais elles ne fonctionnent pas pour moi.

Peut-être parce que je suis nouveau avec Java.

Comment faire?

26
kechapito

La méthode put dans HashMap est définie comme suit:

Object  put(Object key, Object value) 

key est le premier paramètre, donc dans votre phrase, "un" est la clé. Vous ne pouvez pas facilement rechercher une valeur dans un HashMap. Si vous voulez vraiment le faire, ce serait une recherche linéaire effectuée en appelant entrySet(), comme ceci:

for (Map.Entry<Object, Object> e : hashmap.entrySet()) {
    Object key = e.getKey();
    Object value = e.getValue();
}

Cependant, c’est O(n) et cela déforme en quelque sorte le but de l’utilisation d’un HashMap, à moins que vous n’ayez besoin de le faire rarement. Si vous voulez vraiment pouvoir consulter fréquemment par clé ou par valeur, le noyau Java n'a rien pour vous, mais BiMap de Google Collections est ce que vous voulez.

62
kbyrd

Nous pouvons obtenir KEY à partir de VALUE. Vous trouverez ci-dessous un exemple de code _ 

 public class Main {
  public static void main(String[] args) {
    Map map = new HashMap();
    map.put("key_1","one");
    map.put("key_2","two");
    map.put("key_3","three");
    map.put("key_4","four");
System.out.println(getKeyFromValue(map,"four")); } public static Object getKeyFromValue(Map hm, Object value) { for (Object o : hm.keySet()) { if (hm.get(o).equals(value)) { return o; } } return null; } }

J'espère que cela aidera tout le monde.

25
Rupesh Yadav
  • Si vous avez besoin de only that, utilisez simplement put(100, "one"). Notez que la clé est le premier argument et la valeur est le 2e.
  • Si vous devez pouvoir obtenir à la fois la clé et la valeur, utilisez BiMap (à partir de goyave)
5
Bozho

Vous avez mélangé les clés et les valeurs.

Hashmap <Integer,String> hashmap = new HashMap<Integer, String>();

hashmap.put(100, "one");
hashmap.put(200, "two");

Ensuite un

hashmap.get(100);

va vous donner "un"

5
Udo Held

Vous l'avez inversé. Le 100 devrait être le premier paramètre (c'est la clé) et le "un" devrait être le deuxième paramètre (c'est la valeur).

Lisez le javadoc pour HashMap et cela pourrait vous aider: HashMap

Pour obtenir la valeur, utilisez hashmap.get(100).

4
AHungerArtist
public class Class1 {
private String extref="MY";

public String getExtref() {
    return extref;
}

public String setExtref(String extref) {
    return this.extref = extref;
}

public static void main(String[] args) {

    Class1 obj=new Class1();
    String value=obj.setExtref("AFF");
    int returnedValue=getMethod(value);     
    System.out.println(returnedValue);
}

/**
 * @param value
 * @return
 */
private static int getMethod(String value) {
      HashMap<Integer, String> hashmap1 = new HashMap<Integer, String>();
        hashmap1.put(1,"MY");
        hashmap1.put(2,"AFF");

        if (hashmap1.containsValue(value))
        {
            for (Map.Entry<Integer,String> e : hashmap1.entrySet()) {
                Integer key = e.getKey();
                Object value2 = e.getValue();
                if ((value2.toString()).equalsIgnoreCase(value))
                {
                    return key;
                }
            }
        }   
        return 0;

}
}
1
user3510015

Si vous n'êtes pas obligé d'utiliser Hashmap, je vous conseillerais d'utiliser la paire <T, T> . Les éléments individuels sont accessibles aux appels first et second.

Jetez un coup d’œil à ceci http://www.cplusplus.com/reference/utility/pair/

Je l'ai utilisé ici: http://codeforces.com/contest/507/submission/9531943

0
pukingminion