mirror of
https://github.com/github/codeql.git
synced 2025-12-25 13:16:33 +01:00
Where possible update Java documentation links to Java 11. Additionally update some other links to use HTTPS.
48 lines
1.6 KiB
XML
48 lines
1.6 KiB
XML
<!DOCTYPE qhelp PUBLIC
|
|
"-//Semmle//qhelp//EN"
|
|
"qhelp.dtd">
|
|
<qhelp>
|
|
|
|
|
|
<overview>
|
|
<p>Java's Collections Framework provides several different ways of iterating
|
|
the contents of a map. You can retrieve the set of keys, the collection of values, or the
|
|
set of "entries" (which are, in effect, key/value pairs).</p>
|
|
|
|
<p>The choice of iterator can affect performance. For example, it is considered bad practice to iterate
|
|
the key set of a map if the body of the loop performs a map lookup on each retrieved key
|
|
anyway.</p>
|
|
|
|
</overview>
|
|
<recommendation>
|
|
|
|
<p>Evaluate the requirements of the loop body. If it does not actually need the key
|
|
apart from looking it up in the map, iterate the map's values (obtained by a call to
|
|
<code>values</code>) instead. If the loop genuinely needs both key and value for
|
|
each mapping in the map, iterate the entry set (obtained by a call to
|
|
<code>entrySet</code>) and retrieve the key and value from each entry. This saves a
|
|
more expensive map lookup each time.</p>
|
|
|
|
</recommendation>
|
|
<example>
|
|
|
|
<p>In the following example, the first version of the method <code>findId</code> iterates
|
|
the map <code>people</code> using the key set. This is inefficient because the body of the loop
|
|
needs to access the value for each key. In contrast, the second version iterates the map
|
|
using the entry set because the loop body needs both the key and the value for each mapping.</p>
|
|
|
|
<sample src="InefficientKeySetIterator.java" />
|
|
|
|
</example>
|
|
<references>
|
|
|
|
|
|
<li>
|
|
Java API Specification:
|
|
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html#entrySet()">Map.entrySet()</a>.
|
|
</li>
|
|
|
|
|
|
</references>
|
|
</qhelp>
|