Inspectopedia Help

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