2013-08-16 112 views
2

我有一本字典在Java中:迭代字典中的Java

protected Dictionary<String, Object> objects; 

現在我想要得到的字典的鍵,這樣我可以得到的get()在該鍵的值迴路:

for (final String key : this.objects) { 
    final Object value = this.objects.get(key); 

但這不起作用。 :( 任何想法

THX 托馬斯

PS:我需要在一個變量的關鍵&值都

+0

同樣的問題在以下鏈接回答:HTTP://stackoverflow.com/questions/9371667/foreach-loop-in-java-for-dictionary – vinay

+1

對於初學者,避免使用'Dictionary';這是一個傳統課程。改爲使用'HashMap'。 – chrylis

+0

HashMap和Dictionary之間的性能差異與C#相關,不適用於Java。它們是完全不同的語言,在Java中我們已經使用HashMap超過15年了,推薦使用Dictionary。 Dictionary甚至沒有實現Map接口,它已經過時了。 –

回答

12

第一件事第一,Dictionary班的方式已經過時,您應該使用Map代替:

protected Map<String, Object> objects = new HashMap<String, Object>(); 

一旦這是固定的,我覺得這是你的意思:

for (String key : objects.keySet()) { 
    // use the key here 
} 

如果您打算遍歷鍵和值,這是better做到這一點:

for (Map.Entry<String, Object> entry : objects.entrySet()) { 
    String key = entry.getKey(); 
    Object val = entry.getValue(); 
} 
+1

他沒有使用'Map'而是'Dictionary' ... http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html#keys%28%29 ...根據他正在做的事情,使用「Map」可能會也可能不會更好,但這是一個重要的區別。 – StormeHawke

+0

@StormeHawke是的,我剛剛意識到這一點。我相應地更新了我的答案 –

+0

但是,如果您使用了很多對象(100,000或更多),Map會退出緩慢 –

1

你可以得到的值作爲

for(final String key : this.objects.keys()){ 
    final Object value = this.objects.get(key); 
} 
2

java.util.Map是字典equivaivalent和下面是如何迭代通過每個條目的例子

Map<String, Object> map = new HashMap<String, Object>(); 
//... 

for (String key : map.keySet()) { 
} 

for (Object value : map.values()) { 
} 

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Object value = entry.getValue(); 
} 
4

如果必須使用字典(例如OSGi的菲利克斯框架ManagedService),那麼下面的作品..

public void updated(Dictionary<String, ?> dictionary) 
    throws ConfigurationException { 

    if(dictionary == null) { 
     System.out.println("dict is null"); 
    } else { 
     Enumeration<String> e = dictionary.keys(); 
     while(e.hasMoreElements()) { 
      String k = e.nextElement(); 
      System.out.println(k + ": " + dictionary.get(k)); 
     } 
    } 
}