529 Stimmen

Java Hashmap: So erhalten Sie den Schlüssel vom Wert?

Wenn ich den Wert "foo" habe und eine HashMap ftw, für die ftw.containsValue("foo") true zurückgibt, wie kann ich den entsprechenden Schlüssel erhalten? Muss ich durch die HashMap schleifen? Wie ist der beste Weg, das zu tun?

20voto

phani Punkte 477

Mit Java 8:

ftw.forEach((key, value) -> {
    if (value.equals("foo")) {
        System.out.print(key);
    }
});

0 Stimmen

@Anton, wahr, es sei denn, dass Wert internalisiert wurde.

19voto

ABHI Punkte 171

Verzieren Sie die Karte mit Ihrer eigenen Implementierung

class MyMap extends HashMap{

    Map reverseMap = new HashMap();

    @Override
    public V put(K key, V value) {
        // TODO Auto-generated method stub
        reverseMap.put(value, key);
        return super.put(key, value);
    }

    public K getKey(V value){
        return reverseMap.get(value);
    }
}

0 Stimmen

Ich finde das ist ein interessanter Ansatz, obwohl da die Beziehung 1:1 sein muss, würde ich die HashMap vollständig loswerden und stattdessen die Map Schnittstelle implementieren, um Duplikate von Werten und Schlüsseln zu vermeiden.

12voto

recursive Punkte 80517

Es gibt keine eindeutige Antwort, da mehrere Schlüssel auf den gleichen Wert abbilden können. Wenn Sie Eindeutigkeit mit Ihrem eigenen Code durchsetzen, ist die beste Lösung, eine Klasse zu erstellen, die zwei Hashmaps verwendet, um die Zuordnungen in beide Richtungen zu verfolgen.

12voto

wsorenson Punkte 5263

Um alle Schlüssel zu finden, die auf diesen Wert abbilden, durchlaufen Sie alle Paare in der HashMap, indem Sie map.entrySet() verwenden.

5 Stimmen

Diese Lösung ist schrecklich intensiv, so dass sie auf großen HashMaps praktisch nicht durchführbar ist.

12voto

boy Punkte 187

Ich denke, dies ist die beste Lösung, Originaladresse: Java2s

    import java.util.HashMap;
    import java.util.Map;

        public class Main {

          public static void main(String[] argv) {
            Map map = new HashMap();
            map.put("1","one");
            map.put("2","two");
            map.put("3","three");
            map.put("4","four");

            System.out.println(getKeyFromValue(map,"three"));
          }

// hm is the map you are trying to get value from it
          public static Object getKeyFromValue(Map hm, Object value) {
            for (Object o : hm.keySet()) {
              if (hm.get(o).equals(value)) {
                return o;
              }
            }
            return null;
          }
        }

Eine einfache Anwendung: Wenn Sie alle Daten in einer HashMap speichern und ein Element = "Automobil" haben, suchen Sie seinen Schlüssel in der HashMap. Das ist eine gute Lösung.

getKeyFromValue(hashMap, item);
System.out.println("getKeyFromValue(hashMap, item): "+getKeyFromValue(hashMap, item));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X