web-dev-qa-db-de.com

Holen Sie sich den Schlüssel von einer HashMap mit dem Wert

Ich möchte den Schlüssel einer HashMap mit dem Wert erhalten.

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

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

Das heißt, ich möchte eine Funktion, die den Wert 100 annehmen und den String Eins zurückgeben wird.

Es scheint, dass es hier viele Fragen gibt, die dasselbe fragen, aber sie funktionieren nicht für mich.

Vielleicht, weil ich neu mit Java bin.

Wie es geht?

26
kechapito

Die Put-Methode in HashMap ist folgendermaßen definiert:

Object  put(Object key, Object value) 

key ist der erste Parameter, also ist in Ihrem Put "one" der Schlüssel. Sie können den Wert in einer HashMap nicht einfach nachschlagen. Wenn Sie das wirklich tun möchten, wäre dies eine lineare Suche, die durch Aufruf von entrySet() durchgeführt wird:

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

Dies ist jedoch O(n) und besiegt eine Art HashMap, wenn Sie dies nur selten tun müssen. Wenn Sie wirklich nach Schlüsseln oder Werten suchen möchten, hat Core Java nichts für Sie, aber so etwas wie BiMap aus den Google Collections ist das, was Sie wollen.

62
kbyrd

Wir können KEY von VALUE erhalten. Unten ist ein Beispielcode _ 

 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; } }

Ich hoffe das hilft allen.

25
Rupesh Yadav
  • Wenn Sie nur benötigen, verwenden Sie einfach put(100, "one"). Beachten Sie, dass der Schlüssel das erste Argument ist und der Wert der 2. ist.
  • Wenn Sie sowohl den Schlüssel als auch den Wert abrufen können, verwenden Sie BiMap (von Guave).
5
Bozho

Sie haben die Tasten und die Werte gemischt.

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

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

Danach a

hashmap.get(100);

werde dir "eins" geben

5
Udo Held

Sie haben es umgekehrt. Die 100 sollte der erste Parameter sein (es ist der Schlüssel) und die "Eins" sollte der zweite Parameter sein (es ist der Wert).

Lesen Sie den Javadoc für HashMap und das könnte Ihnen helfen: HashMap

Um den Wert abzurufen, verwenden Sie 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

wenn Sie was, um "EIN" zu erhalten, indem Sie in 100 dann geben

initialisieren Sie die Hash-Map mit

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

haspmap.put(100,"one");

und Wert abrufen mit hashMap.get(100)

ich hoffe, das hilft.

0
Kaushal Singh

Wenn Sie nicht verpflichtet sind, Hashmap zu verwenden, würde ich empfehlen, die Paare <T, T> ..__ zu verwenden. Auf die einzelnen Elemente kann über die Aufrufe first und second zugegriffen werden.

Schauen Sie sich diese http://www.cplusplus.com/reference/utility/pair/ an.

Ich habe es hier benutzt: http://codeforces.com/contest/507/submission/9531943

0
pukingminion