/ / Welches ist besser, um jeden Eintrag in HashMap zu durchlaufen? [Duplikat] - Java, Wörterbuch, Sammlungen

Welche ist besser, um jeden Eintrag in HashMap zu durchlaufen? [Duplizieren] - Java, Wörterbuch, Sammlungen

Ich habe zwei Möglichkeiten, wie wir jeden Eintrag in der Hashmap durchlaufen können. Können Sie erklären, welcher dem anderen vorzuziehen ist und warum?

HashMap m = new HashMap();
m.put("A",100);
m.put("B",100);
m.put("C",100);
m.put("D",100);

Ein Weg, um zu iterieren

Set s1 = m.entrySet();
Iterator itr = s1.iterate();
while(itr.hasNext()) {
Map.Entry m1 = (Map.Entry)s1.next();
System.out.println(m1.getKey()+"..."+m1.getValue);
}

Zweiter Weg zum Iterieren

Set<Map.Entry<String,Integer>> s1 = m.entrySet();
for(Map.Entry<String,Integer> m1:s1){
System.out.println(m1.getKey()+"..."+m1.getValue);
}

Antworten:

3 für die Antwort № 1

Die beiden sind im Wesentlichen gleich (mit Ausnahme der Rohtypen im ersten Snippet - wenn Sie explizit verwenden Iteratorgibt es keinen Grund, roh zu verwenden Set, Iterator und Map.Entry - benutzen Set<Map.Entry<String,Integer>>, Iterator<Map.Entry<String,Integer>> und Map.Entry<String,Integer>).

Die erweiterte for-Schleife erstellt eine Iterator hinter den Kulissen.

Wenn Sie jedoch Elemente aus dem entfernen möchten Set Während Sie darüber iterieren, müssen Sie eine explizite verwenden Iterator (und das Iterator"s remove() Methode).

Darüber hinaus können Sie im ersten Snippet die ersten beiden Anweisungen kombinieren - Iterator<Map.Entry<String,Integer>> itr = m.entrySet().iterator(); - da du das nicht brauchst Set Referenz.


2 für die Antwort № 2

HINWEIS: Für einen einfacheren Vergleich der tatsächlichen Unterschiede habe ich den Code neu geschrieben

Wenn Sie nur an den Elementen arbeiten möchten, vergessen Sie, dass sie zu einem Container gehören ... die zweiter Weg ist besser, weil prägnanter und klarer zu lesen

for (Map.Entry<String,Integer> elem : m.entrySet()) {
System.out.println(elem.getKey() + "..." + elem.getValue());
}

Wenn Sie jedoch die Containerstruktur selbst bearbeiten müssen (z. B. Elemente hinzufügen, löschen) ... die erster Weg ist der richtige

for (Iterator<Map.Entry<String, Integer>> itr = m.entrySet().iterator();
itr.hasNext();) {
Map.Entry<String, Integer> elem = itr.next();
System.out.println(elem.getKey() + "..." + elem.getValue());
}

1 für die Antwort № 3

Sie sind gleichwertig, daher würde ich die zweite definitiv bevorzugen, da sie einfacher und etwas schneller ist (obwohl es wahrscheinlich schwer zu bemerken sein wird).

Ich würde es aber noch weiter vereinfachen:

for(Map.Entry<String,Integer> m1 : s1.entrySet()){
System.out.println(m1.getKey() + "..." + m1.getValue);
}