2013-08-16 5 views
2

Я словарь в Java:Iterate словарь в Java

protected Dictionary<String, Object> objects; 

Теперь я хочу, чтобы получить ключи словаря, так что я могу получить значение ключа с ГЭТ() в течение петля:

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

Но это не сработает. :( Любая идея

Thx Томас

PS:. Мне нужен ключ & значение как в переменной

+0

Тот же вопрос ответил в следующей ссылке: //stackoverflow.com/questions/9371667/foreach-loop-in-java-for-dictionary – vinay

+1

Для начала избегайте использования словаря; это унаследованный класс. Вместо этого используйте 'HashMap'. – chrylis

+0

Разница в производительности между HashMap и Dictionary важна для C#, а не для Java. Это совершенно разные языки, в Java мы уже более 15 лет используем HashMap, и это рекомендуется для Словаря. Словарь даже не реализует интерфейс карты, он устарел. –

ответ

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

Он не использует «карту», ​​а «словарь» ... http: //docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html#keys%28%29 ... Возможно, лучше или не лучше использовать «карту» в зависимости от того, что он пытается сделать, но это важное различие. – StormeHawke

+0

@StormeHawke yep, я просто это понял. Я обновил свой ответ соответственно –

+0

Но карта медленно прекращается, если вы используете много объектов (100 000 и более) –

1

Вы можете получить значения, как

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

java.util.Map является Словарь, эквивалентный и ниже, является примером того, как вы можете проходить через каждую запись

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)); 
     } 
    } 
} 
Смежные вопросы