Відмінності між Collection.clear () та Collection.removeAll ()

1. Огляд

У цьому короткому посібнику ми дізнаємося про два методи збору, які, здається, роблять одне і те ж, але не є: clear () та removeAll () .

Спочатку ми побачимо визначення методів, а потім використаємо їх у коротких прикладах.

2. Collection.clear ()

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

Отже, в основному виклик clear () у будь-якому списку призведе до того, що список стане порожнім.

3. Collection.removeAll ()

Тепер ми подивимось на Javadoc з Collection.removeAll () . Ми бачимо, що метод приймає Collection як аргумент. І його мета - видалити всі загальні елементи між списком та колекцією.

Отже, коли він викликає його до колекції, він видалить усі елементи з переданого аргументу, які також є у колекції, для якої ми називаємо removeAll () .

4. Приклади

Давайте тепер розглянемо деякий код, щоб побачити ці методи в дії. Спочатку ми створимо тестовий клас з ім’ям ClearVsRemoveAllUnitTest .

Після цього ми створимо перший тест для 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.