Рубрики
Без рубрики

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

Узнайте о разнице между методами clear() и remove All()

Автор оригинала: François Dupire.

1. Обзор

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

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

2. Сбор.очистить()

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

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

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

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

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

4. Примеры

Давайте теперь рассмотрим некоторый код, чтобы увидеть эти методы в действии. Сначала мы создадим тестовый класс с именем Очистить Vs Удалить Все Модульные Тесты .

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

Мы инициализируем коллекцию Целых чисел с несколькими числами и вызовем 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() удаляет только элементы, соответствующие элементам из другой Коллекции .

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