KeySet Iterator
ID |
java.keyset_iterator |
Severity |
low |
Remediation Complexity |
trivial |
Remediation Risk |
low |
Remediation Effort |
low |
Resource |
Efficiency |
Language |
Java |
Tags |
efficiency |
Description
Reports enhanced-for loops that iterate over map.keySet() and then call map.get(key) inside the loop body. This pattern performs two hash lookups per entry instead of one.
Rationale
Each call to map.get(key) re-computes the hash and traverses the bucket chain. When iterating over the entire map, using entrySet() provides direct access to both key and value in a single lookup.
// Bad -- two lookups per entry
for (String key : map.keySet()) {
String value = map.get(key);
process(key, value);
}
Remediation
Use entrySet() to iterate over keys and values together.
// Good -- single lookup per entry
for (Map.Entry<String, String> entry : map.entrySet()) {
process(entry.getKey(), entry.getValue());
}