Iterator over HashMap in Java

dictionary, iterator, java

Solution

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))

Problem

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(); hm.put(0, "zero"); hm.put(1, "one"); Iterator iter = (Iterator) hm.keySet().iterator(); while(iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); System.out.println(entry.getKey() + " - " + entry.getValue()); } ``` First, I needed to cast Iterator on hm.keySet().iterator(), because otherwise it said "Type mismatch: cannot convert from java.util.Iterator to Iterator". But then I get "The method hasNext() is undefined for the type Iterator", and "The method hasNext() is undefined for the type Iterator".

Original source