Ответ 1
Вы получите его, позвонив
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
.