FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
codeql/java/ql/src/Performance/InefficientKeySetIterator.qhelp at main · github/codeql · GitHub
github
codeql
Repository navigation
Code
Issues
1k
(1k)
Pull requests
474
(474)
Discussions
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
codeql
/
java
/
ql
/
src
/
Performance
/
InefficientKeySetIterator.qhelp
Copy path
More file actions
More file actions
Latest commit
History
History
History
47 lines (34 loc) · 1.62 KB
Breadcrumbs
codeql
/
java
/
ql
/
src
/
Performance
/
InefficientKeySetIterator.qhelp
Copy path
File metadata and controls
47 lines (34 loc) · 1.62 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!
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
>
Back
|
FazBrowse Home
|
New Git URL