Вы получите по телефону
myMap.keySet().iterator();
Тебе даже не нужно знать, что оно существует; это просто артефакт реализации. Насколько вы знаете, они могли использовать летающих обезьян для итерации ключей; если они повторяются в соответствии со спецификацией, не имеет значения, как они это делают.
Кстати, знаете ли вы, что HashMap
имеет закрытый класс с именем KeyIterator
(как и ConcurrentHashMap
, ConcurrentSkipListMap
, EnumMap
, IdentityHashMap
, TreeMap
и WeakHashMap
)
Имеет ли это значение в том, как вы перебираете ключи HashMap
?
Редактировать: В ответ на ваш комментарий учтите, что если вы пытаетесь перебрать все пары ключ-значение в Map
, есть лучший способ, чем перебирая ключи и вызывая get
для каждого. Метод entrySet()
получает Set
всех пар ключ-значение, которые вы затем можете перебрать. Поэтому вместо того, чтобы писать:
for (Key key : myMap.keySet()) {
Value val = myMap.get(key);
...
}
вы должны написать:
for (Map.Entry<Key, Value> entry : myMap.entrySet()) {
doSomethingWithKey(entry.getKey());
doSomethingWithValue(entry.getValue());
...
}
Вы также можете перебирать значения с помощью values()
, если хотите.
Обратите внимание, что поскольку keySet
, entrySet
и values
определены в Map
интерфейсе , они будут работать для любых Map
, а не только LinkedHashMap
.