Iterator over HashMap in Java

后端 未结 9 1633
醉酒成梦
醉酒成梦 2021-02-07 05:43

I tried to iterate over hashmap in Java, which should be a fairly easy thing to do. However, the following code gives me some problems:

HashMap hm = new HashMap(         


        
相关标签:
9条回答
  • 2021-02-07 06:39

    You should really use generics and the enhanced for loop for this:

    Map<Integer, String> hm = new HashMap<>();
    hm.put(0, "zero");
    hm.put(1, "one");
    
    for (Integer key : hm.keySet()) {
        System.out.println(key);
        System.out.println(hm.get(key));
    }
    

    http://ideone.com/sx3F0K

    Or the entrySet() version:

    Map<Integer, String> hm = new HashMap<>();
    hm.put(0, "zero");
    hm.put(1, "one");
    
    for (Map.Entry<Integer, String> e : hm.entrySet()) {
        System.out.println(e.getKey());
        System.out.println(e.getValue());
    }
    
    0 讨论(0)
  • 2021-02-07 06:43

    Can we see your import block? because it seems that you have imported the wrong Iterator class.

    The one you should use is java.util.Iterator

    To make sure, try:

    java.util.Iterator iter = hm.keySet().iterator();
    

    I personally suggest the following:

    Map Declaration using Generics and declaration using the Interface Map<K,V> and instance creation using the desired implementation HashMap<K,V>

    Map<Integer, String> hm = new HashMap<>();
    

    and for the loop:

    for (Integer key : hm.keySet()) {
        System.out.println("Key = " + key + " - " + hm.get(key));
    }
    

    UPDATE 3/5/2015

    Found out that iterating over the Entry set will be better performance wise:

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

    UPDATE 10/3/2017

    For Java8 and streams, your solution will be (Thanks @Shihe Zhang)

     hm.forEach((key, value) -> System.out.println(key + ": " + value))
    
    0 讨论(0)
  • 2021-02-07 06:46

    Several problems here:

    • You probably don't use the correct iterator class. As others said, use import java.util.Iterator
    • If you want to use Map.Entry entry = (Map.Entry) iter.next(); then you need to use hm.entrySet().iterator(), not hm.keySet().iterator(). Either you iterate on the keys, or on the entries.
    0 讨论(0)
提交回复
热议问题