Bezüglich der vier spezifischen Möglichkeiten, eine Karte in Java zu durchqueren, lesen Sie bitte die ausführliche Erklärung unten.
Methode 1 Dies ist die gebräuchlichste und in den meisten Fällen wünschenswerteste Art der Überquerung. Wird verwendet, wenn sowohl Schlüssel als auch Wert erforderlich sind.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> Eintrag: map.entrySet()) { System.out.println("Key = " + Eintrag. getKey() + ", Value = " + enter.getValue() }
Methode 2 durchläuft Schlüssel oder Werte in einer for-each-Schleife.
Wenn Sie nur die Schlüssel oder Werte in der Karte benötigen, können Sie keySet oder Werte durchlaufen, anstatt enterSet zu verwenden.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //Durchlaufe die Schlüssel in der Map für (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } //Durchlaufe die Werte in der Karte for (Integer value : map.values()) { System.out.println("Value = " + value }
Diese Methode bietet eine etwas bessere Leistung als die EntrySet-Traversal (10 % schneller) und der Code ist sauberer.
Methode drei verwendet Iterator zum Durchlaufen
Verwenden Sie Generika :
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator( while (entries.hasNext()) { Map.Entry<Integer, Integer> Eintrag = Einträge.next(); System.out.println("Key = " + Eintrag.getKey() + ", Value = " + enter.getValue() }
Ohne Verwendung von Generika:
Map Map = new HashMap(); Iterator-Einträge = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry-Eintrag = (Map.Entry) Einträge.next(); Integer)entry.getKey(); Integer value = (Integer)entry.getValue(); System.out.println("Key = " + key + ", Value = " + Wert); }
Sie können den gleichen Ansatz auch auf Schlüsselsätze und Werte anwenden.
Dieser Ansatz erscheint überflüssig, hat aber seine Vorteile. Erstens ist dies die einzige Möglichkeit, eine Karte in älteren Java-Versionen zu durchlaufen. Ein weiterer Vorteil besteht darin, dass Sie iterator.remove() aufrufen können, um Einträge während des Durchlaufens zu löschen, was bei den anderen beiden Methoden nicht möglich ist. Laut Javadoc sind die Ergebnisse unvorhersehbar, wenn Sie versuchen, diese Methode in einer For-Each-Durchquerung zu verwenden.
Aus Leistungssicht ähnelt diese Methode der Leistung der For-Each-Durchquerung (dh Methode 2).
Methode 4: Durchlaufen durch Finden von Werten nach Schlüssel (geringe Effizienz)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println("Key = " + Taste + ", Wert = " + Wert);
Als Alternative zur ersten Methode sieht dieser Code sauberer aus, ist aber tatsächlich ziemlich langsam und ineffizient. Da das Abrufen des Werts aus dem Schlüssel ein zeitaufwändiger Vorgang ist (im Vergleich zu Methode 1 ist diese Methode in verschiedenen Map-Implementierungen 20 bis 200 % langsamer). Wenn Sie FindBugs installiert haben, führt es eine Überprüfung durch und warnt Sie vor ineffizienten Durchläufen. Versuchen Sie also, die Verwendung zu vermeiden.
Zusammenfassen
Wenn Sie nur Schlüssel oder Werte benötigen, verwenden Sie Methode zwei. Wenn die von Ihnen verwendete Sprachversion niedriger als Java 5 ist oder Sie planen, Einträge während des Durchlaufs zu löschen, müssen Sie Methode drei verwenden. Andernfalls verwenden Sie Methode eins (sowohl Schlüssel als auch Wert).