代码之家  ›  专栏  ›  技术社区  ›  Federer

像Python字典一样循环Java HashMap?

  •  7
  • Federer  · 技术社区  · 15 年前

    for k,v in d.iteritems():
        print k,v
    

    5 回复  |  直到 15 年前
        1
  •  20
  •   Richard Fearn    15 年前

    是-例如:

    Map<String, String> map = new HashMap<String, String>();
    // add entries to the map here
    
    for (Map.Entry<String, String> entry : map.entrySet()) {
        String k = entry.getKey();
        String v = entry.getValue();
        System.out.printf("%s %s\n", k, v);
    }
    
        2
  •  6
  •   user159088 user159088    15 年前

    HashMap.entrySet() 将返回与 dictionary.iteritems()

    我认为最接近Python版本。

        3
  •  6
  •   BalusC    15 年前

    Map (我们假设 Map<String, String>

    1. 迭代 Map#entrySet()

      for (Entry<String, String> entry : map.entrySet()) {
          System.out.println(entry.getKey() + "=" + entry.getValue());
      }
      
    2. Map#keySet() 然后使用 Map#get() 要获取每个键的值,请执行以下操作:

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

    get() 在每次迭代中。有人可能会说,创建键集迭代器成本较低,因为它不需要考虑值。但信不信由你 keySet().iterator() 创建和使用 迭代器组件 entrySet().iterator() . 唯一的区别是 keySet() next() 迭代器的调用返回 it.next().getKey() 而不是 it.next()

    这个 AbstractMap#keySet() 's javadoc 证明了这一点:

    entrySet() 迭代器。

    这个 AbstractMap 方法(Java1.6中第300行附近的某个地方):

    public Iterator<K> iterator() {
        return new Iterator<K>() {
            private Iterator<Entry<K,V>> i = entrySet().iterator(); // <-----
    
            public boolean hasNext() {
                return i.hasNext();
            }
    
            public K next() {
                return i.next().getKey(); // <-----
            }
    
            public void remove() {
                i.remove();
            }
        };
    }
    

    请注意,可读性应该优先于过早的优化,但重要的是要记住这一点。

        4
  •  3
  •   Marcelo Lacerda    15 年前
    Set<Map.Entry> set = d.entrySet();
    for(Map.Entry i : set){
      System.out.println(i.getKey().toString() + i.getValue().toString);
    }
    

        5
  •  1
  •   bragboy    15 年前

    在Java中,您可以像下面这样做。

        HashMap<String, String> h = new HashMap<String, String>();
        h.put("1","one");
        h.put("2","two");
        h.put("3","three");
    
        for(String key:h.keySet()){
            System.out.println("Key: "+ key + " Value: " + h.get(key));
        }
    
    推荐文章