Java迭代:Hashtable vs HashMap

时间:2011-07-27 16:01:39

标签: java hashmap hashtable iteration

为什么在运行hashtable和hashmaps的等效代码时会得到不同的结果?

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 个答案:

答案 0 :(得分:3)

虽然技术上不是你问题的“答案”(由于问题中提供的代码不足,这是不可能的),但我确实有关于代码风格的建议。

这可以帮助您避免在代码中发现的错误(根据您之后的评论)。

您提供的代码:

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

相当于foreach上更优雅的entry set循环:

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

如果可以,请优先使用此表单直接使用迭代器 它更整洁,less code == good

答案 1 :(得分:1)

我认为使用HashMap你必须得到entrySet。然后,您可以遍历每个条目......

这是一个关于迭代HashMap的参考:

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

我同意你最初的思路 - 不知道为什么它会这样运作......