2011-07-27 108 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