Самый простой и простой способ пройти через любую коллекцию Java — использовать итерируемый интерфейс. Итерируемый интерфейс, расширенный коллекцией Java, используется для перебора объектов. Интерфейс Map, в отличие от интерфейсов List, Set и Queue, не расширяет интерфейс Collection. Поэтому мы не можем итерировать Map напрямую, используя итераторы.
Обычно существует четыре способа перебора Map в Java. Могут быть вариации этих методов, поэтому не называйте меня точным числом. В этой статье мы обсудим их все, а также рассмотрим примеры кодирования.
Во-первых, нам нужно создать карту. Наша карта ниже, называемая студентами, содержит пары ключ-значение целочисленного идентификатора студента и имени студента String.
Map<Integer, String> students = new HashMap<>(); students.put(100, "James Warton"); students.put(101, "Alex Truman"); students.put(102, "Alice Killet"); students.put(103, "Lual Manyang"); students.put(104, "Aston Villa"); students.put(105, "Black Freeman"); students.put(106, "Chris Dallas");
- Перебор Map.entrySet() с использованием расширенного цикла For:
Метод map.entrySet() возвращает установленное представление карты, то есть представление всех пар ключ-значение, присутствующих на карте. Для каждой записи ключ-значение на карте мы можем использовать методы getValue() и getKey() для получения ключа и значения соответственно. Эти два метода относятся к Map.Entry‹K,V›.
for(Map.Entry<Integer, String> entry: students.entrySet()) { System.out.println("Key: "+entry.getKey()+" value: "+entry.getValue()); }
2. Перебор Map.Entry‹K,V› с использованием итераторов
Как упоминалось ранее, мы не можем напрямую использовать итератор с интерфейсом Map. Но мы можем использовать итератор на Map.Entry‹K,V›. Этот метод аналогичен первому. В первом методе мы использовали расширенный цикл for над Map.Entry‹K, V›, но здесь мы используем итераторы. Использование итераторов вместо Map.Entry‹K, V› имеет свое преимущество, т. е. мы можем удалять записи с карты во время итерации, вызывая метод iterator.remove().
Iterator<Map.Entry<Integer, String>> it = students.entrySet().iterator(); while(it.hasNext()) { Map.Entry<Integer, String> entry = it.next(); System.out.println("Key: "+entry.getKey()+" value: "+entry.getValue()); }
3. Перебор ключей с помощью keySet() и расширенного цикла For
Мы можем использовать метод keySet(), чтобы вернуть установленное представление всех ключей на карте. Мы используем расширенный цикл for для перебора всех ключей в keySet(). Мы можем использовать метод get() для получения значения, связанного с каждым ключом. Если вам нужны только значения из карты, вы можете перебрать метод values(), используя циклы for-each. Ниже приведена программа Java, чтобы продемонстрировать это.
for(Integer key : students.keySet()) { System.out.println("Key: "+key + " Value: "+students.get(key)); }
4. Перебор карты с использованием метода forEach():
Это, вероятно, самый чистый (с меньшим количеством кода) способ перебора вашей карты. Методы forEach() принимают лямбда-выражение
students.forEach((key,value)->System.out.println("Key: "+key + " Value: "+value));
Спасибо, что прочитали. Я надеюсь, что вы нашли эту статью полезной. Вы можете проверить подробное объяснение кодирования на нашем канале YouTube.
Следуйте за нами CodingSimplified