Метод retainAll() класса Java Vector
retainAll()Этот метод —VectorМетод коллекционной операции, предоставляемый классом, который используется для сохранения в текущем векторе элементов, совпадающих с элементами в указанной коллекции, и удаления всех остальных элементов. Иными словами, этот метод изменяет текущий вектор так, чтобы он содержал только элементы, общие для вектора и указанной коллекции.
Синтаксис метода:
public boolean retainAll(Collection<?> c)
Параметры метода
retainAll()Метод принимает один параметр:
Collection<?> cКоллекция, содержащая элементы, которые нужно сохранить. Эта коллекция может быть любым объектом, реализующимCollectionинтерфейс, напримерArrayList、HashSetи т. д.
Возвращаемое значение
Этот метод возвращает логическое значение:
truetrue: если текущий вектор был изменен в результате вызова этого метода (т.е. элементы были удалены)falsefalse: если текущий вектор не был изменен (т.е. все элементы уже существовали в указанной коллекции)
Поведение метода
При вызовеretainAll()для метода выполняются следующие операции:
- Метод обходит все элементы в текущем векторе.
- Для каждого элемента он проверяет, существует ли элемент в коллекции-параметре.
cСредняя - Если элемент не существует в
cколлекции, он удаляется из текущего вектора. - В конечном итоге текущий вектор будет содержать только те элементы, которые присутствуют как в самом векторе, так и в параметре
cколлекции.
Пример кода
Пример
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]
Примечания
Сравнение элементов в коллекции:
retainAll()Метод используетequals()метод equals для сравнения, одинаковы ли элементы. Поэтому для пользовательских объектов убедитесь, что вы правильно реализовалиequals()иhashCode()метод.Параметр collection равен null: Если параметр collection
cравен null, будет выброшено исключение NullPointerException.NullPointerException。Параллельная модификация: Если коллекция изменяется во время итерации (кроме как через собственный
remove()метод), может быть выброшено исключение ConcurrentModificationException.ConcurrentModificationException。Соображения производительности: Для больших коллекций производительность этого метода может быть низкой, поскольку ему необходимо обойти всю коллекцию и выполнить несколько поисков.
Практические сценарии применения
retainAll()Этот метод особенно полезен в следующих сценариях:
- Фильтрация данных: Отфильтровывание элементов, соответствующих определённым условиям, из большой коллекции.
- Пересечение коллекций: Вычисление пересечения двух коллекций.
- Управление разрешениями: Сохранение разрешений, доступных в системе в данный момент, из списка разрешений пользователя.
Сравнение со связанными методами
| Метод | Описание | Изменяет текущую коллекцию | Смысл возвращаемого значения |
|---|---|---|---|
retainAll() |
Оставляет элементы, совпадающие с указанной коллекцией | Да | Было ли изменено |
removeAll() |
Удаляет элементы, совпадающие с указанной коллекцией | Да | Было ли изменено |
containsAll() |
Проверяет, содержит ли коллекция все элементы указанной коллекции | нет | Содержатся ли все |
addAll() |
Добавляет все элементы указанной коллекции | Да | Было ли изменено |
Итог
Vector.retainAll()— это мощный метод работы с коллекциями, который позволяет эффективно отфильтровывать элементы, общие для двух коллекций. Понимание того, как работает этот метод, и сценариев его применения может помочь разработчикам более эффективно выполнять операции с коллекциями. Не забывайте правильно обрабатывать возвращаемое значение и выбирать, использовать ли этот метод, исходя из фактических потребностей.
Java Vector