Итерация Java: Hashtable против HashMap - PullRequest
2 голосов
/ 27 июля 2011

Почему я получаю разные результаты, когда запускаю эквивалентный код для хэш-таблицы и хеш-карт?

Iterator<Integer> it = ht.keySet().iterator();
while(it.hasNext()) {
    i = it.next();
    System.out.println(i + " : " + ht.get(i));
}

ht - это объект хеш-таблицы.Если я заменяю hm, объект hashmap, он не печатает значения из метода get (), а печатает null.Почему это так?

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Хотя технически это не «ответ» на ваш вопрос (что невозможно из-за недостаточного количества кода, указанного в вопросе), у меня есть такое предложение относительно стиля кода.

Это помогло бы вам избежатьошибка, которую вы нашли в своем коде (согласно вашему последующему комментарию).

Код, который вы указали:

Iterator<Integer> it = ht.keySet().iterator();
while(it.hasNext()) {
    i = it.next();
    System.out.println(i + " : " + ht.get(i));
}

эквивалентен этому более элегантному циклу foreach над набор записей :

for (Map.Entry<Integer, Object> entry : ht.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

Используйте эту форму, чтобы использовать итератор напрямую, если вы можете.
Это точнее, и less code == good

1 голос
/ 27 июля 2011

Я думаю, что с HashMap вы должны получить набор записей.Затем вы можете зацикливаться на каждой записи ...

Вот ссылка на итерацию HashMap:

http://www.java2s.com/Code/JavaAPI/java.util/HashMapentrySet.htm

Хотя я согласен с вашей первоначальной последовательностью мыслей -не уверен, почему так работает ...

...