2010-02-07 60 views
7

我有一個問題;我有一些數據,我和Hashtable 例如顯示它我寫:如何枚舉Hashtable的鍵和值?

Enumeration keys; 
    keys=CellTraffic_v.elements(); 
    while(keys.hasMoreElements()) 
     outputBuffer.append(keys.nextElement()+"\n\n"); 

,但它表明我只是重視我該怎麼讓值和鍵? 例如該

如果我的關鍵是 「A」 和我的價值是 「B」 告訴我這一點:

A B 

謝謝...

+3

一個更好的標題可能是:我如何列舉一個Hashtable的鍵和值 – 2010-02-07 07:52:42

+0

@Lachlan:的確如此。 @OP:冒着改變它的自由。 – 2010-02-07 08:10:47

回答

7

你有關鍵是嗎?使用鍵將值從地圖中取出,並且具有所有映射。例如在Java中使用字符串作爲鍵類型:

for (String key : map.keySet()) { 
    System.out.println(key + ":" + map.get(key)); 
} 

+2

這是昂貴的。 Crowder的解決方案要好得多。 – akappa 2010-02-07 07:54:39

+0

@akappa:這種方法的成本是多少?這兩種解決方案都會迭代鍵值對的集合。 – crunchdog 2010-02-07 16:25:43

+1

在你的解決方案中,你可以在每次迭代時進行查找,而在entrySet解決方案中,根本不會進行查找。 – akappa 2010-02-07 17:32:33

1

的entrySet()返回的枚舉Hashtable中的值。
keySet()返回Hashtable中的鍵的枚舉。
的entrySet()返回條目(鍵和值)爲一組

for(Iterator iter=hash.keySet().iterator(); iter.hasNext();) { 
    String key = (String) iter.next(); 
    String value = (String) hash.get(key); 
} 


for(Iteration iter=hash.entrySet().iterator(); iter.hasNext();) { 
    Map.Entry entry = (Map.Entry) iter.next(); 
    String key = (String) entry.getKey(); 
    String value = (String) entry.getValue(); 
} 

或使用泛型,在這種情況下,你的哈希值是一個HashMap <字符串,字符串>

for(String key : hash.keySet()) { 
    String value = hash.get(key); 
} 

for(Map.Entry entry : hash.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
} 
+0

我知道,但我想一起顯示它們 例如System.out.println(key + value); – Freeman 2010-02-07 07:47:37

18

Hashtable implements MapMap.entrySet函數返回Map.Entry實例的集合(Set),其中有getKeygetValue方法。

所以:

Iterator<Map.Entry> it; 
Map.Entry   entry; 

it = yourTable.entrySet().iterator(); 
while (it.hasNext()) { 
    entry = it.next(); 
    System.out.println(
     entry.getKey().toString() + " " + 
     entry.getValue().toString()); 
} 

如果你知道的類型Hashtable中的條目,您可以使用模板來消除上述toString電話。例如,如果您的Hashtable被聲明爲Hashtable<String,String>entry可能會被宣佈爲Map.Entry<String,String>

如果你可以用仿製藥相結合的模板,它是徹頭徹尾的短:

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

即假定yourTableHashtable<String,String>。只是要說明Java在過去幾年中的發展到底有多遠,基本上不會失去其重要的Java性能。稍微OT:如果你不需要同步,使用HashMap而不是Hashtable。如果是這樣,請使用​​(謝謝,akappa!)。

+2

即使您需要同步,也可以使用ConcurrentHashMap。 – akappa 2010-02-07 08:01:05

+0

@akappa:OOOoooh,很好。 @OP:參考:http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html – 2010-02-07 08:04:21