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

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

1. обзор

В этом кратком руководстве мы узнаем о двух методахCollection, которые могут показаться одинаковыми, но это не так:clear() иremoveAll().

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

2. Collection.clear()

Сначала мы погрузимся в методCollection.clear(). Давайте проверимthe Javadoc of the method. Согласно емуthe purpose of clear() is to remove every single element from the list.

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

3. Collection.removeAll()

Теперь посмотрим наJavadoc изCollection.removeAll(). Мы видим, что метод принимает в качестве аргументаCollection. And its purpose is toremove all common elements between the list and the collection.

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

4. Примеры

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

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

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

@Test
void whenClear_thenListBecomesEmpty() {
    Collection 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 firstCollection = new ArrayList<>(
      Arrays.asList(1, 2, 3, 4, 5));
    Collection 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() удаляет только элементы, соответствующие этим элементам из другогоCollection.

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