Метод retainAll() класса Java Vector

Java Vector Java Vector


retainAll()Этот метод —VectorМетод коллекционной операции, предоставляемый классом, который используется для сохранения в текущем векторе элементов, совпадающих с элементами в указанной коллекции, и удаления всех остальных элементов. Иными словами, этот метод изменяет текущий вектор так, чтобы он содержал только элементы, общие для вектора и указанной коллекции.

Синтаксис метода:

public boolean retainAll(Collection<?> c)

Параметры метода

retainAll()Метод принимает один параметр:

  • Collection<?> cКоллекция, содержащая элементы, которые нужно сохранить. Эта коллекция может быть любым объектом, реализующимCollectionинтерфейс, напримерArrayList、HashSetи т. д.

Возвращаемое значение

Этот метод возвращает логическое значение:

  • truetrue: если текущий вектор был изменен в результате вызова этого метода (т.е. элементы были удалены)
  • falsefalse: если текущий вектор не был изменен (т.е. все элементы уже существовали в указанной коллекции)

Поведение метода

При вызовеretainAll()для метода выполняются следующие операции:

  1. Метод обходит все элементы в текущем векторе.
  2. Для каждого элемента он проверяет, существует ли элемент в коллекции-параметре.cСредняя
  3. Если элемент не существует вcколлекции, он удаляется из текущего вектора.
  4. В конечном итоге текущий вектор будет содержать только те элементы, которые присутствуют как в самом векторе, так и в параметреcколлекции.

Пример кода

Пример

import java.util.Vector;
import * Heap;

public class VectorRetainAllExample {
    public static void main(String[] args) {
        // Создать первый Vector
        Vector<String> vector1 = new Vector<>(Arrays.asList("Apple", "Banana", "Orange", "Grape"));
       
        // Создать вторую коллекцию (здесь используется List)
        java.util.List<String> list = Arrays.asList("Banana", "Grape", "Mango");
       
        System.out.println("Исходный вектор: " + vector1);
        System.out.println("Коллекция элементов для сохранения: " + list);
       
        // Вызов метода retainAll()
        boolean changed = vector1.retainAll(list);
       
        System.out.println("Возвращаемое значение метода: " + changed);
        System.out.println("Вектор после операции: " + vector1);
    }
}

Вывод

原始 Vector: [Apple, Banana, Orange, Grape]
要保留的元素集合: [Banana, Grape, Mango]
方法返回值: true
操作后的 Vector: [Banana, Grape]

Примечания

  1. Сравнение элементов в коллекции:retainAll()Метод используетequals()метод equals для сравнения, одинаковы ли элементы. Поэтому для пользовательских объектов убедитесь, что вы правильно реализовалиequals()иhashCode()метод.

  2. Параметр collection равен null: Если параметр collectioncравен null, будет выброшено исключение NullPointerException.NullPointerException。

  3. Параллельная модификация: Если коллекция изменяется во время итерации (кроме как через собственныйremove()метод), может быть выброшено исключение ConcurrentModificationException.ConcurrentModificationException。

  4. Соображения производительности: Для больших коллекций производительность этого метода может быть низкой, поскольку ему необходимо обойти всю коллекцию и выполнить несколько поисков.


Практические сценарии применения

retainAll()Этот метод особенно полезен в следующих сценариях:

  1. Фильтрация данных: Отфильтровывание элементов, соответствующих определённым условиям, из большой коллекции.
  2. Пересечение коллекций: Вычисление пересечения двух коллекций.
  3. Управление разрешениями: Сохранение разрешений, доступных в системе в данный момент, из списка разрешений пользователя.

Сравнение со связанными методами

Метод Описание Изменяет текущую коллекцию Смысл возвращаемого значения
retainAll() Оставляет элементы, совпадающие с указанной коллекцией Да Было ли изменено
removeAll() Удаляет элементы, совпадающие с указанной коллекцией Да Было ли изменено
containsAll() Проверяет, содержит ли коллекция все элементы указанной коллекции нет Содержатся ли все
addAll() Добавляет все элементы указанной коллекции Да Было ли изменено

Итог

Vector.retainAll()— это мощный метод работы с коллекциями, который позволяет эффективно отфильтровывать элементы, общие для двух коллекций. Понимание того, как работает этот метод, и сценариев его применения может помочь разработчикам более эффективно выполнять операции с коллекциями. Не забывайте правильно обрабатывать возвращаемое значение и выбирать, использовать ли этот метод, исходя из фактических потребностей.

Java Vector Java Vector

Другие расширения