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());
}

References