【问题标题】:Iterate Dictionary in Java在 Java 中迭代字典
【发布时间】:2013-08-19 06:38:30
【问题描述】:

我有一本 java 字典:

protected Dictionary<String, Object> objects;

现在我想获取字典的键,这样我就可以在for循环中用get()获取键的值:

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

但这不起作用。 :( 有什么想法吗?

谢谢 托马斯

PS:我需要变量中的键和值。

【问题讨论】:

  • 以下链接回答了同样的问题:stackoverflow.com/questions/9371667/…
  • 对于初学者,避免使用Dictionary;这是一个遗留类。请改用HashMap
  • HashMap 和 Dictionary 之间的性能差异与 C# 相关,与 Java 无关。它们是完全不同的语言,在 Java 中我们已经使用 HashMap 超过 15 年了,推荐使用 Dictionary。 Dictionary 甚至没有实现 Map 接口,它已经过时了。

标签: java dictionary


【解决方案1】:

首先要做的事情。 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();
}

【讨论】:

  • 他使用的不是Map,而是Dictionary... docs.oracle.com/javase/7/docs/api/java/util/…... 使用Map 可能会更好,也可能不会更好,这取决于他想要做什么,但是这是一个重要的区别
  • @StormeHawke 是的,我刚刚意识到这一点。我相应地更新了我的答案
  • 但是如果您使用大量对象(100,000 或更多),则地图退出速度很慢
  • @ThomasFlynn 你从哪里听到这样的话?这是不正确的。 Dictionary 已经过时了,它使用Enumeration 而不是Iterator 来迭代它的条目。十多年来,人们一直在使用实现Map 的类,而没有抱怨性能不佳。此外,100.000 个对象是非常少的对象
  • @ThomasFlynn that link is for C# !!!,这个问题是关于 Java 的,引用的数据结构不可比较,根本。按照我的建议使用Map,这就是Java的方式
【解决方案2】:

如果您必须使用字典(例如 osgi felix 框架 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));
        }
    }
}

【讨论】:

    【解决方案3】:

    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】:

      你可以得到值

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-01
        • 2021-03-19
        • 2012-10-15
        相关资源
        最近更新 更多