Call to 'set.removeAll(list)' may work slowly
Reports calls to java.util.Set.removeAll()
with a java.util.List
argument.
Such a call can be slow when the size of the argument is greater than or equal to the size of the set, and the set is a subclass of java.util.AbstractSet
. In this case, List.contains()
is called for each element in the set, which will perform a linear search.
Example:
public void check(String... ss) {
// possible O(n^2) complexity
mySet.removeAll(List.of(ss));
}
After the quick fix is applied:
public void check(String... ss) {
// O(n) complexity
List.of(ss).forEach(mySet::remove);
}
New in 2020.3
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Java, 233.SNAPSHOT |
Last modified: 13 July 2023