Как пройтись по map java
Перейти к содержимому

Как пройтись по map java

  • автор:

Как с помощью fori пройтись по HashMap?

Как-то так. Но здесь создается лишний List, поэтому если вам просто нужен индекс, то добавьте соот. переменную и инкрементируйте ее в цикле.

List keys = new ArrayList(map.keySet()); for(int i = 0; i

Отслеживать

ответ дан 22 фев 2016 в 14:26

4,089 1 1 золотой знак 10 10 серебряных знаков 22 22 бронзовых знака

int i = 0; for (Map.Entry entry : map.entrySet()) < System.out.println(i + " " + entry.getKey() + " " + entry.getValue()); ++i; //iterate >
 Iterator> iterator = map.entrySet().iterator(); for (int i = 0; ; ++i) < if(iterator.hasNext()) < Map.Entryentry = iterator.next(); System.out.println(i + " " + entry.getKey() + " " + entry.getValue()); > else break; > 

Перебрать карту в Java

В этом кратком руководстве мы рассмотрим различные способы перебора записей Map в Java.

Проще говоря, мы можем извлечь содержимое карты с помощью entrySet() , keySet() или values() . Поскольку это все наборы, ко всем из них применяются одинаковые принципы итерации.

Давайте подробнее рассмотрим некоторые из них.

2. Краткое введение в методы Map entrySet (), keySet() и values() ​

Прежде чем мы перейдем к карте, используя три метода, давайте разберемся, что эти методы делают:

  • entrySet() – возвращает коллекцию-представление карты, элементы которой взяты из класса Map.Entry . Метод entry.getKey() возвращает ключ, а entry.getValue() возвращает соответствующее значение.
  • keySet () — возвращает все ключи, содержащиеся в этой карте, в виде набора
  • values () — возвращает все значения, содержащиеся в этой карте, в виде набора

Далее давайте посмотрим на эти методы в действии.

3. Использование цикла for

3.1. Использование набора записей() ​

Во-первых, давайте посмотрим, как перебирать Map с помощью Entry Set :

 public void iterateUsingEntrySet(MapString, Integer> map)    for (Map.EntryString, Integer> entry : map.entrySet())    System.out.println(entry.getKey() + ":" + entry.getValue());   >   > 

Здесь мы извлекаем множество записей из нашей карты , а затем перебираем их, используя классический подход для каждого.

3.2. Использование набора ключей() ​

В качестве альтернативы мы можем сначала получить все ключи в нашей карте с помощью метода keySet , а затем перебрать карту по каждому ключу:

 public void iterateUsingKeySetAndForeach(MapString, Integer> map)    for (String key : map.keySet())    System.out.println(key + ":" + map.get(key));   >   > 

3.3. Перебор значений с использованием values() ​

Иногда нас интересуют только значения на карте, независимо от того, какие ключи с ними связаны . В этом случае values() — наш лучший выбор:

 public void iterateValues(MapString, Integer> map)    for (Integer value : map.values())    System.out.println(value);   >   > 

4. Итератор

Другой подход к выполнению итерации — использование Iterator . Далее давайте посмотрим, как методы работают с объектом Iterator .

4.1. Итератор и entrySet()

Во-первых, давайте пройдемся по карте, используя Iterator и entrySet() :

 public void iterateUsingIteratorAndEntry(MapString, Integer> map)    IteratorMap.EntryString, Integer>> iterator = map.entrySet().iterator();   while (iterator.hasNext())    Map.EntryString, Integer> entry = iterator.next();   System.out.println(entry.getKey() + ":" + entry.getValue());   >   > 

Обратите внимание, как мы можем получить экземпляр Iterator , используя API iterator() набора , возвращаемого entrySet(). Затем, как обычно, мы перебираем итератор с помощью iterator.next().

4.2. Итератор и keySet() ​

Точно так же мы можем перебирать карту с помощью Iterator и keySet() :

 public void iterateUsingIteratorAndKeySet(MapString, Integer> map)    IteratorString> iterator = map.keySet().iterator();   while (iterator.hasNext())    String key = iterator.next();   System.out.println(key + ":" + map.get(key));   >   > 

4.3. Итератор и значения() ​

Мы также можем пройтись по значениям карты, используя итератор и метод values() :

 public void iterateUsingIteratorAndValues(MapString, Integer> map)    IteratorInteger> iterator = map.values().iterator();   while (iterator.hasNext())    Integer value = iterator.next();   System.out.println("value :" + value);   >   > 

5. Использование Lambdas и Stream API​

Начиная с версии 8, Java представила Stream API и лямбда-выражения. Далее давайте посмотрим, как итерировать карту, используя эти методы.

5.1. Использование forEach() и Lambda​

Как и большинство других вещей в Java 8, это оказалось намного проще, чем альтернативы. Мы просто воспользуемся методом forEach() :

 public void iterateUsingLambda(MapString, Integer> map)    map.forEach((k, v) -> System.out.println((k + ":" + v)));   > 

В этом случае нам не нужно преобразовывать карту в набор записей. Чтобы узнать больше о лямбда-выражениях, мы можем начать здесь .

Мы можем, конечно, начать с ключей, чтобы перебрать карту:

 public void iterateByKeysUsingLambda(MapString, Integer> map)    map.keySet().foreach(k -> System.out.println((k + ":" + map.get(k))));   > 

Точно так же мы можем использовать ту же технику с методом values() :

 public void iterateValuesUsingLambda(MapString, Integer> map)    map.values().forEach(v -> System.out.println(("value: " + v)));   > 

5.2. Использование потокового API

Stream API — одна из важных функций Java 8. Мы также можем использовать эту функцию для циклического просмотра карты .

Stream API следует использовать, когда мы планируем выполнять дополнительную обработку Stream ; в противном случае это просто forEach() , как описано ранее.

Давайте возьмем entrySet() в качестве примера, чтобы увидеть, как работает Stream API:

 public void iterateUsingStreamAPI(MapString, Integer> map)    map.entrySet().stream()   // . some other Stream processings   .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));   > 

Использование Stream API с методами keySet() и values() будет очень похоже на пример выше.

6. Заключение

В этой статье мы сосредоточились на критической, но простой операции: переборе элементов карты .

Мы рассмотрели несколько методов, которые можно использовать только с Java 8+, а именно лямбда-выражения и Stream API.

Как всегда, примеры кода в этой статье можно найти на GitHub .

  • 1. Обзор
  • 2. Краткое введение в методы Map entrySet (), keySet() и values()
  • 3. Использование цикла for
    • 3.1. Использование набора записей()
    • 3.2. Использование набора ключей()
    • 3.3. Перебор значений с использованием values()
    • 4.1. Итератор и entrySet()
    • 4.2. Итератор и keySet()
    • 4.3. Итератор и значения()
    • 5.1. Использование forEach() и Lambda
    • 5.2. Использование потокового API

    Перебор элементов коллекции Map

    В библиотеке Java предусмотрены две основные реализации словарей (карт): хэш-карта HashMap и карта-дерево ТгееМар. Оба эти класса реализуют интерфейс Map, который не наследует интерфейс Collection, но является неотъемлемой частью коллекций. Все интерфейсы фреймворка находятся в пакете java.util.

    В хэш-карте ключи расположены случайным образом, а в карте-дереве — в строгом порядке. Хэш-функция, или функция сравнения, применяется только для ключей, а са­ми значения, соответствующие этим ключам, не хэшируются и не сравниваются.

    Проход по каждой паре ключ-значение — самая базовая, основная процедура прохода по Map. В Java, каждая пара хранится в поле Map называемом Map.Entry. Map.entrySet() возвращает набор ключей-значений, потому самым эффективным способом пройтись по всем значениям Map будет:

    for (Map.Entry entry: hashmap.entrySet()) System.out.println(entry.getKey() + " = " + entry.getValue());

    Так же мы можем использовать Iterator — интерфейс, для организации цикла для перебора коллекций.

    // hasNext() проверяет есть ли ещё элементы // next() возвращает очередной элемент Iterator> itr = hashmap.entrySet().iterator(); while (itr.hasNext()) System.out.println(itr.next());

    Можно пробежаться по ключам:

    // keySet возвращает множество ключей for (String key: map.keySet()) System.out.println(map.get(key));

    Как пройтись по map java

    Проверьте, пожалуйста, код в разделе «3. Как отсортировать значения мапы», в нём надо переименовать переменную.

    Dmytryi Shubchynskyi Уровень 108 Expert
    22 февраля 2022
    для чего нужно Создание неизменяемой (immutable) пустой мапы ?
    Sergey Kornilov Уровень 39
    5 июля 2021
    В закладки.
    Иван Уровень 41
    8 января 2021

    Так же есть ошибка в пункте 4, подпункт 3, где говорится про потокобезопасность HashTable. В тексте нужно поменять местами HashMap и HashTable и тогда таблица будет верно читаться.

    Yuliia Boklah Уровень 41
    6 сентября 2020

    В свою очередь, TreeMap гарантирует хранение элементов в порядке добавления или же в соответствии с заданным компаратором. Указана совершенно неправильная информация. Речь идет об LinkedHashMap. В TreeMap элементы хранятся в есттественном порядке (natural ordering) или же в соответствии с заданным компаратором. Исправьте ошибку и не вводите учеников в заблуждение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *