3898 Stimmen

Wie kann ich effizient über jeden Eintrag in einer Java Map iterieren?

Wenn ich ein Objekt habe, das die Map Schnittstelle in Java und ich möchte über jedes darin enthaltene Paar iterieren. Wie kann ich die Karte am effizientesten durchlaufen?

Hängt die Reihenfolge der Elemente von der spezifischen Kartenimplementierung ab, die ich für die Schnittstelle habe?

46 Stimmen

In Java 8 mit Lambda-Ausdruck: stackoverflow.com/a/25616206/1503859

5 Stimmen

4voto

Badri Paudel Punkte 998

Sie können nach dem Schlüssel suchen, und mit Hilfe des Schlüssels können Sie den zugehörigen Wert der Karte finden, da die Karte eindeutiger Schlüssel sehen Sie, was passiert, wenn der Schlüssel ein Duplikat ist aquí ou aquí .

Demo-Karte :

 Map<String, String> map = new HashMap();
  map.put("name", "Name");
  map.put("age", "23");
  map.put("address", "NP");
  map.put("faculty", "BE");
  map.put("major", "CS");
  map.put("head", "MDK");

Um nur den Schlüssel zu erhalten, können Sie Folgendes verwenden map.keySet(); wie dieses :

for(String key : map.keySet()) {
      System.out.println(key);
  }

Um nur den Wert zu erhalten, können Sie verwenden map.values(); wie diese:

      for(String value : map.values()) {
      System.out.println(value);
  }

Um sowohl den Schlüssel als auch seinen Wert zu erhalten, können Sie immer noch map.keySet(); und erhalten den entsprechenden Wert, etwa so:

 //this prints the key value pair
  for (String k : map.keySet()) {
        System.out.println(k + " " + map.get(k) + " ");
    }

map.get(key) gibt den Wert an, auf den dieser Schlüssel verweist.

3voto

JohnK Punkte 6057

Sie beantwortet zwar nicht ganz die Frage des Auftraggebers, könnte aber für andere, die diese Seite finden, nützlich sein:

Wenn Sie nur die Werte und nicht die Schlüssel benötigen, können Sie dies tun:

Map<Ktype, Vtype> myMap = [...];
for (Vtype v: myMap.values()) {
  System.out.println("value: " + v);
}

Ktype , Vtype sind Pseudocode.

3voto

Syd Lambert Punkte 1267

Wenn Sie die Karte in der Reihenfolge durchlaufen wollen, in der die Elemente hinzugefügt wurden, verwenden Sie LinkedHashMap im Gegensatz zu nur Map .

Dieser Ansatz hat sich für mich in der Vergangenheit bewährt:

LinkedHashMap<String,Integer> test=new LinkedHashMap();

test.put("foo",69);
test.put("bar",1337);

for(int i=0;i<test.size();i++){
    System.out.println(test.get(test.keySet().toArray()[i]));
}

Sortie :

69
1337

3voto

Dubstep Punkte 143
Map<String, String> map = 
for (Map.Entry<String, String> entry : map.entrySet()) {
    MapKey = entry.getKey() 
    MapValue = entry.getValue();
}

2voto

fechidal89 Punkte 725

Mit diesem Code habe ich die Daten einer Karte in eine andere kopiert:

HashMap product =(HashMap)shopping_truck.get(i);
HashMap tmp = new HashMap();
for (Iterator it = product.entrySet().iterator(); it.hasNext();) {
    Map.Entry thisEntry = (Map.Entry) it.next();
    tmp.put(thisEntry.getKey(), thisEntry.getValue());
}

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