Причина HashMap не реализует интерфейс Iterable?
Может ли кто-нибудь сказать мне причину, по которой HashMap
не реализует интерфейс Iterable
?
Ответы
Ответ 1
Чтобы быть тупым, Map
в общем случае (и HashMap
в частности) не реализуют Iterator
, потому что неясно, что он должен выполнять итерацию. Существует три варианта:
Ни один из трех вариантов выше не выглядит совершенно необоснованным: аргумент может быть сделан в пользу каждого из этих подходов. В конце концов, разработчики библиотеки решили не делать этого выбора для вас, позволяя программистам выбирать, что итерации явно.
Ответ 2
Карта не реализует его, но вы можете использовать keySet()
или values()
или entrySet()
и все реализовать итератор по мере их набора. См. Карту javadoc здесь
Ответ 3
Карта хэша содержит две структуры данных, ключи и значения, и каждый из них имеет итератор.
HashMap в целом не является структурой данных, которую нужно перебирать.
Ответ 4
Не напрямую. Вам нужна структура 1 измерения для ее итерации.
hashMap.entrySet().iterator()
выполнит эту работу.
Ответ 5
Sun мог бы сделать Map extend Iterable, но для этого потребуется, чтобы сама карта имела метод iterator(). Представьте себе все пользовательские реализации карт, которые будут нарушены. Это плохо, они сделали это с интерфейсами java.sql.
Кроме того, вы можете выполнять итерацию по карте с помощью keySet(), entrySet() или values () - 8, 10 или 8 дополнительных символов.
Ответ 6
Интерфейс карты не реализует интерфейс Collection, поскольку он не содержит элементов, но содержит записи ключей и их соответствующие значения.