Перебор 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().