Вы продвигаете итератор (вызывая next()
) дважды внутри цикла, и таким образом «пропускаете» половину значений.Вы должны звонить next()
только один раз за каждый проверочный hasNext()
.В этом случае, просто используйте вашу локальную переменную key
:
Set<String> keySet = hm2.keySet();
Iterator<String> itr = keySet.iterator();
while(itr.hasNext())
{
String key = itr.next();
System.out.println("Key: " + key + "Values:" + hm2.get(key));
}
Обратите внимание, что вы можете просто перебрать entrySet()
вместо перебора keySet()
и затем получитьзначение для каждой клавиши:
Set<Map.Entry<String, Integer>> entrySet = hm2.entrySet();
Iterator<Map.Entry<String, Integer>> itr = entrySet.iterator();
while(itr.hasNext())
{
Map.Entry<String, Integer> entry = itr.next();
System.out.println("Key: " + entry.getKey() + "Values:" + entry.getValue());
}
Или, что еще более элегантно, с расширенным циклом for:
for (Map.Entry<String, Integer> entry : hm2.entrySet())
{
System.out.println("Key: " + entry.getKey() + "Values:" + entry.getValue());
}