Перейти к основному содержимому

Различия между Collection.clear() и Collection.removeAll()

· 2 мин. чтения

1. Обзор

В этом кратком руководстве мы узнаем о двух методах Collection , которые, казалось бы, делают одно и то же, но это не так: clear() и removeAll() .

Сначала мы рассмотрим определения методов, а затем используем их в коротких примерах.

2. Коллекция.очистить()

Сначала мы погрузимся в метод Collection.clear() . Давайте проверим Javadoc метода . Согласно ему, цель clear() — удалить каждый элемент из списка.

Таким образом, вызов clear() в любом списке приведет к тому, что список станет пустым.

3. Коллекция.удалить все()

Теперь мы рассмотрим Javadoc Collection.removeAll () . Мы видим, что метод принимает коллекцию в качестве аргумента. И его цель — удалить все общие элементы между списком и коллекцией.

Таким образом, при вызове его для коллекции он удалит все элементы из переданного аргумента, которые также находятся в коллекции, для которой мы вызываем removeAll() .

4. Примеры

Давайте теперь посмотрим на код, чтобы увидеть эти методы в действии. Сначала мы создадим тестовый класс с именем ClearVsRemoveAllUnitTest .

После этого мы создадим первый тест для Collection.clear() .

Мы инициализируем набор целых чисел несколькими числами и вызовем для него функцию clear() , чтобы в списке не осталось ни одного элемента:

@Test
void whenClear_thenListBecomesEmpty() {
Collection<Integer> collection = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

collection.clear();

assertTrue(collection.isEmpty());
}

Как мы видим, коллекция пуста после вызова clear() .

Давайте создадим второй тест с двумя коллекциями, одна с номерами от 1 до 5, а другая с номерами от 3 до 7. После этого мы вызовем removeAll() для первой коллекции со второй в качестве параметра.

Мы ожидаем, что в первом наборе останутся только числа 1 и 2 (а второй не изменится):

@Test
void whenRemoveAll_thenFirstListMissElementsFromSecondList() {
Collection<Integer> firstCollection = new ArrayList<>(
Arrays.asList(1, 2, 3, 4, 5));
Collection<Integer> secondCollection = new ArrayList<>(
Arrays.asList(3, 4, 5, 6, 7));

firstCollection.removeAll(secondCollection);

assertEquals(
Arrays.asList(1, 2),
firstCollection);
assertEquals(
Arrays.asList(3, 4, 5, 6, 7),
secondCollection);
}

И наши ожидания оправдываются. В первой коллекции остались только числа 1 и 2, а вторая не изменилась.

5. Вывод

В этой статье мы рассмотрели назначение функций Collection.clear() и Collection.removeAll() .

Несмотря на то, что мы могли бы подумать сначала, они не делают то же самое. clear() удаляет каждый элемент из коллекции, а removeAll() удаляет только те элементы, которые соответствуют элементам из другой коллекции .

И, как всегда, код можно найти на GitHub .