Avoid Set.removeAll(List), which is quadratic if set.size() <= list.size().

RELNOTES: None.
PiperOrigin-RevId: 210117999
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index 0e05539..e3f4d2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -209,8 +209,12 @@
         }
       }
     }
-    modularHeaders.removeAll(headerInfo.modularHeaders);
-    modularHeaders.removeAll(headerInfo.textualHeaders);
+    for (Artifact a : headerInfo.modularHeaders) {
+      modularHeaders.remove(a);
+    }
+    for (Artifact a : headerInfo.textualHeaders) {
+      modularHeaders.remove(a);
+    }
     return new IncludeScanningHeaderData(
         Collections.unmodifiableMap(pathToLegalOutputArtifact),
         Collections.unmodifiableSet(modularHeaders));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index bd7bcde..6387161 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -404,27 +404,25 @@
         cppConfiguration.isStrictSystemIncludes()
             ? getBuiltInIncludeDirectories()
             : getValidationIgnoredDirs();
-    ArrayList<Artifact> found = new ArrayList<>();
+    Set<Artifact> missing = Sets.newHashSet();
     // Lazily initialize, so that compiles that properly declare all their files profit.
     Set<PathFragment> declaredIncludeDirs = null;
     for (Artifact header : undeclaredHeaders) {
       if (FileSystemUtils.startsWithAny(header.getExecPath(), ignoreDirs)) {
-        found.add(header);
         continue;
       }
       if (declaredIncludeDirs == null) {
         declaredIncludeDirs = ccCompilationContext.getDeclaredIncludeDirs().toSet();
       }
-      if (isDeclaredIn(actionExecutionContext, header, declaredIncludeDirs)) {
-        found.add(header);
+      if (!isDeclaredIn(actionExecutionContext, header, declaredIncludeDirs)) {
+        missing.add(header);
       }
     }
-    undeclaredHeaders.removeAll(found);
-    if (undeclaredHeaders.isEmpty()) {
+    if (missing.isEmpty()) {
       return headers;
     }
 
-    return Iterables.filter(headers, header -> !undeclaredHeaders.contains(header));
+    return Iterables.filter(headers, header -> !missing.contains(header));
   }
 
   @Nullable