java collection - keyset () vs entrySet () в карте

Я помещаю элементы массива строк - это карта, где элементы массива строк являются ключевыми, а частота слова - значением, например:

String[] args = {"if","it","is","to","be","it","is","up","me","to","delegate"};

тогда карта будет иметь записи типа [if: 1, it : 2 ....]

Set<String> keys = m.keySet();
System.out.println("keyset of the map : "+keys);

выводит все ключи: «if», «it», «is», «to», «be», «it», «is», «up», « me "," to "," delegate "

Set<Map.Entry<String, Integer>> entrySet = m.entrySet();
Iterator<Map.Entry<String, Integer>> i = entrySet.iterator();
while(i.hasNext()){
    Map.Entry<String, Integer> element = i.next();
    System.out.println("Key: "+element.getKey()+" ,value: "+element.getValue());
}

печатает все пары значений ключей:

Использование набора записей выводит все значения:

Key: if ,value: 1
Key: it ,value: 2
Key: is ,value: 2
Key: to ,value: 2
Key: be ,value: 1
Key: up ,value: 1
Key: me ,value: 1
Key: delegate ,value: 1

Но блок кода ниже должен выводить точно такой же вывод, как и выше, но он делает not:

Iterator<String> itr2 = keys.iterator();
while(itr2.hasNext()){
    //System.out.println(itr1.next()+" ");
    //System.out.println(m.get(itr1.next())+" ");
    System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));
}

Он выводит:

Key: if ,value: 2
Key: is ,value: 2
Key: be ,value: 1
Key: me ,value: 1

Но если мы раскомментируем строку 1 в цикле while, т.е.

System.out.println(itr1.next()+" ");

и закомментируем строку

System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));

, то мы получим все ключи: {"if", "it", «is», «to», «be», «it», «is», «up», «me», «to», «delegate»};

Если мы используем m.get ( ) с itr2.next () , то итератор не имеет нескольких ключей!

34
задан aribeiro 17 April 2017 в 08:59
поделиться