Как я получаю keyIterator для LinkedHashMap?

следует использовать функциональный язык Imo. Деревья сложнее представлять и манипулировать на ОО-языках.

14
задан soldier.moth 10 June 2009 в 21:18
поделиться

3 ответа

Вы получите его, позвонив по номеру

myMap.keySet().iterator();

. Вам даже не нужно знать, что он существует; это просто артефакт реализации. Насколько вам известно, они могли использовать летающих обезьян для перебора ключей; пока они повторяются в соответствии со спецификацией, не имеет значения, как они это делают.

Кстати, знаете ли вы, что HashMap имеет частный класс под названием KeyIterator (как и ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , IdentityHashMap , TreeMap и и )?
Есть ли разница в том, как вы перебираете ключи HashMap ?


Edit: В ответ на ваш комментарий имейте в виду, что если вы пытаетесь перебрать все пары ключ-значение в 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 и определены в интерфейсе Map , они будут работать для любой Map , а не только LinkedHashMap .

45
ответ дан 1 December 2019 в 06:13
поделиться

Это частный класс, поэтому вы не можете использовать его напрямую.

  private class KeyIterator extends LinkedHashIterator<K> {

его экземпляр возвращается при использовании обычного итератора.

myMap.keySet().iterator()
4
ответ дан 1 December 2019 в 06:13
поделиться

Вы не должны использовать ничего, что определено как часть внутренней реализации LinkedHashMap (то есть в исходном коде, но не определено в API). Что произойдет, если в следующем выпуске изменится внутренняя реализация? Весь ваш код, использующий его, сломается.

Вы должны использовать код API и сделать что-то вроде

myMap.keySet().iterator()
3
ответ дан 1 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: