Java List removeAll() method removes all of its elements that are also present in the given list. The method throws UnsupportedOperationException if the operation is not supported by the list.
If the given collection is null, NullPointerException is thrown.
This method returns true
if the list is changed, otherwise false
.
Java List removeAll() Examples
Let’s look at some examples of removeAll() method with different types of list implementations.
1. ArrayList removeAll() Example
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("C");
list.add("B");
list.add("A");
System.out.println(list);
List<String> removeList = List.of("A", "B");
boolean isRemoved = list.removeAll(removeList);
System.out.println(list);
System.out.println(isRemoved);
Output:
[A, B, C, C, B, A]
[C, C]
true
2. LinkedList removeAll() Example
List<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println(linkedList);
boolean flag = linkedList.removeAll(List.of(1, 2));
System.out.println(linkedList);
System.out.println(flag);
Output:
[1, 2, 3]
[3]
true
3. List removeAll() UnsupportedOperationException
If we invoke removeAll() method on an Unmodifiable list, we will get UnsupportedOperationException.
List.of() method returns an Unmodifiable list.
jshell> List<Integer> list = List.of(1, 2);
list ==> [1, 2]
jshell> list.removeAll(List.of(1));
| Exception java.lang.UnsupportedOperationException
| at ImmutableCollections.uoe (ImmutableCollections.java:72)
| at ImmutableCollections$AbstractImmutableCollection.removeAll (ImmutableCollections.java:80)
| at (#67:1)
jshell>

Java List removeAll() UnsupportedOperationException
4. List removeAll() NullPointerException
jshell> List<Integer> list = new ArrayList<>();
list ==> []
jshell> list.removeAll(null);
| Exception java.lang.NullPointerException
| at Objects.requireNonNull (Objects.java:221)
| at ArrayList.batchRemove (ArrayList.java:847)
| at ArrayList.removeAll (ArrayList.java:822)
| at (#71:1)
jshell>

Java List removeAll() NullPointerException
5. Java List removeAll() Not Working
If you look at the implementation of removeAll() method in ArrayList/LinkedList, it uses following methods internally.
removeAll() -> contains() -> indexOf() -> indexOfRange() -> equals()
So, it’s necessary that the list elements have proper implementation of equals() and hashCode() methods. Otherwise, you will get unwanted results.
Here is an example where the equals() and hashCode() method is not implemented for the List elements and the removeAll() operation is not working as expected.
package com.journaldev.java;
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemoveAll {
public static void main(String[] args) {
List<Record> list = new ArrayList<>();
list.add(new Record(1, "Hi"));
list.add(new Record(2, "Hello"));
list.add(new Record(3, "Howdy"));
System.out.println("Original List =" + list);
list.removeAll(List.of(new Record(1, "Hi"), new Record(2, "Hello")));
System.out.println("Updated List =" + list);
}
}
class Record {
private int id;
private String data;
Record(int i, String d) {
this.id = i;
this.data = d;
}
@Override
public String toString() {
return String.format("R{%d, %s}", this.id, this.data);
}
}
Output:
Original List =[R{1, Hi}, R{2, Hello}, R{3, Howdy}]
Updated List =[R{1, Hi}, R{2, Hello}, R{3, Howdy}]
It seems that the removeAll() method is not working. Now let’s add equals() and hashCode() method implementations to the Record class.
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((data == null) ? 0 : data.hashCode());
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Record other = (Record) obj;
if (data == null) {
if (other.data != null)
return false;
} else if (!data.equals(other.data))
return false;
if (id != other.id)
return false;
return true;
}
Updated Output:
Original List =[R{1, Hi}, R{2, Hello}, R{3, Howdy}]
Updated List =[R{3, Howdy}]
Now the removeAll() method is working as we expected. So whenever you feel that the removeAll() operation is not working as expected, check the equals() and hashCode() implementations in the list elements class.
What library do you use to make those code blocks