Перебор HashMap в Java — entrySet, keySet и forEach с примерами
В HashMap можно итерироваться по ключам, значениям и парам ключ/значение.
Пример 1: Итерация по HashMap с помощью цикла forEach
import java.util.HashMap;
import java.util.Map.Entry;
class Main {
public static void main(String[] args) {
// Creating a HashMap
HashMap<String, String> languages = new HashMap<>();
languages.put("Java", "Enterprise");
languages.put("Python", "ML/AI");
languages.put("JavaScript", "Frontend");
System.out.println("HashMap: " + languages);
// iterating through key/value mappings
System.out.print("Entries: ");
for(Entry<String, String> entry: languages.entrySet()) {
System.out.print(entry);
System.out.print(", ");
}
// iterating through keys
System.out.print("\nKeys: ");
for(String key: languages.keySet()) {
System.out.print(key);
System.out.print(", ");
}
// iterating through values
System.out.print("\nValues: ");
for(String value: languages.values()) {
System.out.print(value);
System.out.print(", ");
}
}
}
Вывод:
HashMap: {Java=Enterprise, JavaScript=Frontend, Python=ML/AI}
Entries: Java=Enterprise, JavaScript=Frontend, Python=ML/AI,
Keys: Java, JavaScript, Python,
Values: Enterprise, Frontend, ML/AI,
В приведённом примере мы создали HashMap с именем languages. Здесь мы использовали цикл forEach для обхода элементов карты.
Обратите внимание, что мы независимо итерируемся по ключам, значениям и парам ключ/значение:
languages.entrySet()— возвращает представление всех записей в виде множества;languages.keySet()— возвращает представление всех ключей в виде множества;languages.values()— возвращает представление всех значений в виде множества.
Примечание
Мы использовали класс Map.Entry. Это вложенный класс, который возвращает представление карты.
Пример 2: Итерация по HashMap с помощью iterator()
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
class Main {
public static void main(String[] args) {
// create a HashMap
HashMap<String, String> languages = new HashMap<>();
languages.put("Java", "Enterprise");
languages.put("Python", "ML/AI");
languages.put("JavaScript", "Frontend");
System.out.println("HashMap: " + languages);
// create an object of Iterator
Iterator<Entry<String, String>> iterate1 = languages.entrySet().iterator();
// iterate through key/value mappings
System.out.print("Entries: ");
while(iterate1.hasNext()) {
System.out.print(iterate1.next());
System.out.print(", ");
}
// iterate through keys
Iterator<String> iterate2 = languages.keySet().iterator();
System.out.print("\nKeys: ");
while(iterate2.hasNext()) {
System.out.print(iterate2.next());
System.out.print(", ");
}
// iterate through values
Iterator<String> iterate3 = languages.values().iterator();
System.out.print("\nValues: ");
while(iterate3.hasNext()) {
System.out.print(iterate3.next());
System.out.print(", ");
}
}
}
Вывод:
HashMap: {Java=Enterprise, JavaScript=Frontend, Python=ML/AI}
Entries: Java=Enterprise, JavaScript=Frontend, Python=ML/AI,
Keys: Java, JavaScript, Python,
Values: Enterprise, Frontend, ML/AI,
В этом примере мы итерируемся по ключам, значениям и парам ключ/значение карты. Использован метод iterator(). Здесь:
hasNext()— возвращаетtrue, если есть следующий элемент;next()— возвращает следующий элемент.
Примечание
Для обхода HashMap также можно использовать метод HashMap.forEach().