как это работает
for(Map.Entry<String, String> x : map.entrySet())
System.out.println(x.getKey() + " - " + x.getValue());
Eugene
24 уровень
все работает,объясните плеаз)
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий Кравчук
10 июня 2020, 10:39
Описание цикла for-each - ссылка
0
Vladislav Grigorev
10 июня 2020, 10:36
как я понимаю for(Map.Entry<String, String> x : map.entrySet()) это цикл, который сверяет 2 Map значения (<String, String>). А второе это принт ключа x.getKey() (арбуз) и значения x.getValue (ягода).
0
hidden #598481
10 июня 2020, 10:44
Цикл не сверяет, цикл перебирает элементы коллекции. В данном случае перебирает пары ключ-значение, входящие в мапу.
0
hidden #2291199
10 июня 2020, 15:39
будь добр, подскажи, верно ли я понимаю. Спасибо!
Map.Entry<String, String> - объявляем тип переменной объекта (тут у нас интерфейс Entry вложенный в интерфейс Map ), которая хранит типизированные объекты <String, String>
x - имя переменной
map.entrySet() - map это ссылка на "карту", entrySet() метод возвращающий пару ключ и значение.
x.getKey() + " - " + x.getValue() - вызов ключа и значения
0
hidden #598481
10 июня 2020, 16:18
entrySet() не возвращает конкретную пару, entrySet представляет мапу в виде набора отдельных пар.
Сначала возьми простой пример. Допустим у тебя есть массив строк String[] words и есть цикл
Запись по сути читается так:
for [every] String words [from] words, то есть для каждой строки word из массива words.
То есть ты по очереди берешь строку за строкой, каждую из них помещаешь в одну и ту же переменную word и что-то там с ней делаешь. Такая же запись будет, если words - это не массив, а список (List) или множество (Set).
Такую запись можно применять для объекта любого класса, реализующего интерфейс Iterable ("перебираемое").
Класс Map, хоть и относится к фреймворку коллекций, сам этого интерфейса не реализует в силу своей более сложной структуры, но при этом объект Map можно преобразовать в Set из уникальных пар. Поскольку ключи в мапе уникальные, то и пары уникальные. За это как раз отвечает метод entrySet. В результате получается такой же Set, только не хранящий строки или числа (Set<String>, Set<Integer>), а хранящий более сложный объект класса Map.Entry, представляющий собой одну отдельно взятую пару. Еще говорят "вхождение" (собственно, Entry).
Таким образом по аналогии с предыдущим циклом мы можем получить такую запись:
for [every] Map.Entry entry [from] map.entrySet() или "для каждого вхождения entry из набора вхождений map"
Ну и если вспомнить, что наша мапа хранила не Object, а все-таки String в качестве типов ключей и значений, то получается, что и каждое вхождение тоже хранит именно эти типы данных. Отсюда и появляется <String, String> в типе данных переменной entry
+3