How do I efficiently iterate over each entry in a Java Map?
Как мне эффективно выполнять итерацию по каждой записи в Java Map?
Если у меня есть объект, реализующий Map интерфейс на Java, и я хочу выполнить итерацию по каждой паре, содержащейся в нем, каков наиболее эффективный способ прохождения по карте?
Будет ли порядок элементов зависеть от конкретной реализации map, которая у меня есть для интерфейса?
Чтобы обобщить другие ответы и объединить их с тем, что я знаю, я нашел 10 основных способов сделать это (см. Ниже). Также я написал несколько тестов производительности (см. Результаты ниже). Например, если мы хотим найти сумму всех ключей и значений map, мы можем написать:
Используя iterator и Map.Entry
longi=0; Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, Integer> pair = it.next(); i += pair.getKey() + pair.getValue(); }
Используя foreach и Map.Entry
longi=0; for (Map.Entry<Integer, Integer> pair : map.entrySet()) { i += pair.getKey() + pair.getValue(); }
Использование forEach из Java 8
finallong[] i = {0}; map.forEach((k, v) -> i[0] += k + v);
Использование набора ключей и foreach
longi=0; for (Integer key : map.keySet()) { i += key + map.get(key); }
Использование набора ключей и итератора
longi=0; Iterator<Integer> itr2 = map.keySet().iterator(); while (itr2.hasNext()) { Integerkey= itr2.next(); i += key + map.get(key); }