2011-07-27 83 views
1

为什么我在运行hashtable和hashmaps的等效代码时会得到不同的结果?Java迭代:Hashtable对HashMap

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

区别必须来自其他原因。尝试输出简单的'ht.toString()'进行比较。 –

+3

当我运行更完整的测试用例时,我没有得到不同的结果。 (好吧,我得到不同的顺序)。你会发布你使用的完整代码吗? –

+0

对不起人们,我在一个产生不好结果的地方切换了迭代器的使用。纠正它,谢谢你的评论! – Ari53nN3o

回答

2

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

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

的代码,你提供:

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

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

这里有一个关于迭代HashMap中的参考文献:

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

我虽然跟你的想法的初始列车同意 - 不知道为什么是这样工作的。 ..

+2

你可以这样做,它更有效率,但没有理由keySet()+ get()不应该工作。 –

+0

@David - 谢谢你 - 我是Java的新手,并且遇到了与Dry类似的keySet问题...我一直在使用entrySet ...显然是为了我的好处,但是出于错误原因:) – Brian