Iterating Over a Map in Java
A Map<K, V> cannot be iterated directly using an iterator like Collection because it stores key–value pairs, not single elements.
However, Java provides three main ways to iterate:
- Iterate over keys
- Iterate over values
- Iterate over entries (recommended)
Below are complete examples.
1. Iterate Using keySet()
Iterates only through keys.
Example:
Map<String, Integer> scores = new HashMap<>();
scores.put("Swapnil", 90);
scores.put("Kuwar", 85);
for (String key : scores.keySet()) {
System.out.println(key);
}
Iterator<String> it = scores.keySet().iterator();
while (it.hasNext()) {
System.out.println("Key: " + it.next());
}
2. Iterate Using values()
Iterates only through values.
Example:
for (Integer value : scores.values()) {
System.out.println(value);
}
Iterator<Integer> valueIterator = scores.values().iterator();
while (valueIterator.hasNext()) {
System.out.println("Value: " + valueIterator.next());
}
3. Iterate Using entrySet() (Best Way)
This provides both key and value at the same time.
Example:
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
Using Iterator:
Iterator<Map.Entry<String, Integer>> entryIt = scores.entrySet().iterator();
while (entryIt.hasNext()) {
Map.Entry<String, Integer> entry = entryIt.next();
System.out.println(entry.getKey() + " = " + entry.getValue());
}
4. Using Java 8 forEach
Example:
scores.forEach((key, value) -> {
System.out.println(key + " : " + value);
});
5. Iterate Over Keys and Fetch Values Manually (Less Efficient)
Example:
for (String key : scores.keySet()) {
Integer value = scores.get(key);
System.out.println(key + " => " + value);
}
Note:
- This is slower because
get()is called for each key. - Prefer
entrySet()for performance.
Which Iteration Method Should You Use?
| Method | Use Case |
|---|---|
| keySet() | When you only need keys |
| values() | When you only need values |
| entrySet() | Best choice for key + value |
| forEach | Simple and clean syntax |
Summary
- Map does not extend Collection, so it has its own iteration API.
entrySet()is the most efficient for key–value iteration.- Java provides Iterator support for all 3 views: keys, values, and entries.
- Enhanced for-loop and lambdas simplify iteration.