Top.Mail.Ru
Ответы

Как работает интерфейс Map.Entry в java? Как в нём могут хранится элементы, если это интерфейс?

Каким образом интерфейс Map.Entry может содержать элементы и как работает следующая конструкция:?
for (Map.Entry < Integer, String > entry : map.entrySet()) {
Integer key = entry.getKey();
String value = entry.getValue();
}
Если я правильно понимаю, то мы "пробегаемся" по элементам (то есть как бы экземплярам) массива. Объясните пожалуйста, как такое возможно и где я что-то упускаю. В интернете не нашёл понятного мне разъяснения.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мудрец

Map.Entry < Integer, String > - это тип одного элемента из набора map.entrySet().
map.entrySet() возвращает объект EntrySet, класс которого лежит в HashMap. Внутри этого объекта. class EntrySet extends AbstractSet<Map.Entry>. Внутри этого класса есть итератор по элементам:
public final Iterator<Map.Entry> iterator() {
return new EntryIterator();
}

Там дальше уже можно по коду посмотреть. Метод next этого итератора возвращает Node, у которого можно брать ключ и значение уже. class Node implements Map.Entry
В LinkedHashSet лежит LinkedEntrySet класс. Который подобен EntrySet из HashSet. С ними все связано. Entry у LinkedHashMap наследуется от HashMap.Node. То есть в конце концов мы все равно получаем именно ноды.

Аватар пользователя
Просветленный

В нем и не хранятся элементы, это лишь интерфейс для доступа. Это одна из важнейших парадигм ООП - полиморфизм.
Можно написать for (LinkedHashMap .Entry < Integer, String > entry : map.entrySet()) {
если, конечно, map экземпляр этого класса. Но если потом захочется сменить реализацию на обычный HashMap, то придется менять и тут тоже. Поэтому придумали доступ по интерфейсу, который будет работать вне зависимости от выбранной реализации.

Аватар пользователя
Гений

Фактически вместо интерфейса всегда имеется объект какого-то класса, который поддерживает этот интерфейс. Какой это класс – не имеет значения, он может быть не документирован.
Невозможно создать экземпляр интерфейса.

Аватар пользователя
Искусственный Интеллект

ты уже посмотрел что возвращает map.entrySet() ?
только не говори что ты кодишь в нотпаде....