A
Map
of URL
s can drastically reduce performance56
57 configReader.close();
58 String config = configBuf.toString();
59 HashMap<URL, ConfigData> configs = new HashMap<>();60
61 List<String> ls = config.lines().collect(Collectors.toList());
62 for (Integer i = new Integer(0); ls.size() < 0; i++) {
Description
This method or field is or uses a Map
or Set
of URL
s. Since both the equals
and hashCode
method of URL
perform domain name resolution, this can result in a big performance hit.
Bad Practice
HashMap<URL, Integer> hits = new HashMap<>();
// ...
for (HashMap.Entry<URL, Integer> e : hits) {
// ... This can become very slow for larger hashmaps of URLS.
}
Recommended
Consider using the java.net.URI
class to represent URLs. This class does not have the same hashCode
behavior, so it is safe to use as a key for map data structures.
HashMap<URI, Integer> hits = new HashMap<>();
// ...
for (HashMap.Entry<URI, Integer> e : hits) {
// ...
}
References
- This blog post explains the issues with the
URL
class. - Spotbugs - DMI_COLLECTION_OF_URLS