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(
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());
}
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))
Several problems here:
import java.util.Iterator
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.