2013-02-22 111 views
1

我寫下面的代碼來檢索hashmap中的值。但它沒有工作。在java中檢索hashmap值

HashMap<String, String> facilities = new HashMap<String, String>(); 

Iterator i = facilities.entrySet().iterator(); 

while(i.hasNext()) 
{ 
    String key = i.next().toString(); 
    String value = i.next().toString(); 
    System.out.println(key + " " + value); 
} 

我修改了包含SET類的代碼,它工作正常。

Set s= facilities.entrySet(); 
Iterator it = facilities.entrySet().iterator(); 
while(it.hasNext()) 
{ 
    System.out.println(it.next()); 
} 

任何人都可以指導我出了什麼差錯在上面的代碼中沒有SET類?

P.S - 我沒有太多的編程exp和使用Java最近

+2

你跟HashMap中得到什麼錯誤,即會顯示什麼? – Prateek 2013-02-22 10:38:21

+1

你期望什麼,你是什麼感受? – Behe 2013-02-22 10:46:34

+0

我沒有收到任何錯誤。但是輸出屏幕中沒有顯示任何內容。所以我GOOGLE了,並使用SET類。然後顯示值。所以我的問題是爲什麼沒有顯示沒有SET類的值? – Neil 2013-02-22 11:00:46

回答

10

要調用next()兩次啓動。

試試這個:

while(i.hasNext()) 
{ 
    Entry e = i.next(); 
    String key = e.getKey(); 
    String value = e.getValue(); 
    System.out.println(key + " " + value); 
} 

總之你也可以使用下面的代碼(這也保持類型的信息)。以某種方式使用Iterator是Java-1.5之前的樣式。

for(Entry<String, String> entry : facilities.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    System.out.println(key + " " + value); 
} 
2

的問題是你打電話i.next()拿到鑰匙,然後你再調用它來獲取值(下一個條目的值)。

另一個問題是您在Entry的其中一個上使用toString,這與getKeygetValue不一樣。

你需要做的是這樣的:

Iterator<Entry<String, String>> i = facilities.entrySet().iterator(); 
... 
while (...) 
{ 
    Entry<String, String> entry = i.next(); 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    ... 
} 
0
Iterator i = facilities.keySet().iterator(); 

while(i.hasNext()) 
{ 
    String key = i.next().toString(); 
    String value = facilities.get(key); 
    System.out.println(key + " " + value); 
} 
+0

這不會導致最佳性能。在我看來,這個代碼更難以閱讀。 – Kai 2013-02-22 10:50:06

0

你打電話i.next()比循環一次。我認爲這是造成麻煩。

你可以試試這個:

HashMap<String, String> facilities = new HashMap<String, String>(); 
Iterator<Map.Entry<String, String>> i = facilities.entrySet().iterator(); 
Map.Entry<String, String> entry = null; 
while (i.hasNext()) { 
    entry = i.next(); 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    System.out.println(key + " " + value); 
} 
0
String key; 
for(final Iterator iterator = facilities.keySet().iterator(); iterator.hasNext();) {<BR> 
    key = iterator.next();<BR> 
    System.out.println(key + " : " + facilities.get(key));<BR> 

for (Entry<String, String> entry : facilities.entrySet()) {<BR> 
System.out.println(entry.getKey() + " : " + entry.getValue();<BR> 
}