Java Vector retainAll() 方法

Java Vector Java Vector


retainAll() 方法是 Java 中 Vector 类提供的一个集合操作方法,它用于保留当前向量中与指定集合相同的元素,移除所有其他元素。换句话说,这个方法会修改当前向量,使其仅包含与指定集合共有的元素。

方法语法:

public boolean retainAll(Collection<?> c)

方法参数

retainAll() 方法接受一个参数:

  • Collection<?> c:包含要保留元素的集合。这个集合可以是任何实现了 Collection 接口的对象,如 ArrayListHashSet 等。

返回值

该方法返回一个布尔值:

  • true:如果当前向量因调用此方法而发生了改变(即有元素被移除)
  • false:如果当前向量没有发生任何改变(即所有元素都已存在于指定集合中)

方法行为

当调用 retainAll() 方法时,会发生以下操作:

  1. 方法会遍历当前向量中的所有元素
  2. 对于每个元素,检查它是否存在于参数集合 c
  3. 如果元素不存在于 c 中,则从当前向量中移除该元素
  4. 最终,当前向量将只包含那些同时存在于向量自身和参数集合 c 中的元素

示例代码

实例

import java.util.Vector;
import java.util.Arrays;

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("原始 Vector: " + vector1);
        System.out.println("要保留的元素集合: " + list);
       
        // 调用 retainAll() 方法
        boolean changed = vector1.retainAll(list);
       
        System.out.println("方法返回值: " + changed);
        System.out.println("操作后的 Vector: " + vector1);
    }
}

输出结果

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

注意事项

  1. 集合中的元素比较retainAll() 方法使用 equals() 方法来比较元素是否相同。因此,对于自定义对象,确保正确实现了 equals()hashCode() 方法。

  2. 参数集合为 null:如果参数集合 c 为 null,会抛出 NullPointerException

  3. 并发修改:如果在迭代过程中修改集合(除了通过迭代器自身的 remove() 方法),可能会抛出 ConcurrentModificationException

  4. 性能考虑:对于大型集合,此方法的性能可能较低,因为它需要遍历整个集合并进行多次查找。


实际应用场景

retainAll() 方法在以下场景中特别有用:

  1. 数据过滤:从一个大集合中筛选出符合特定条件的元素
  2. 集合交集:计算两个集合的交集
  3. 权限控制:从用户权限列表中保留系统当前可用的权限

与相关方法的比较

方法 描述 修改当前集合 返回值意义
retainAll() 保留与指定集合相同的元素 是否发生改变
removeAll() 移除与指定集合相同的元素 是否发生改变
containsAll() 检查是否包含指定集合所有元素 是否全部包含
addAll() 添加指定集合所有元素 是否发生改变

总结

Vector.retainAll() 是一个强大的集合操作方法,可以有效地筛选出两个集合共有的元素。理解这个方法的工作原理和适用场景,能够帮助开发者更高效地处理集合操作任务。记住要正确处理方法的返回值,并根据实际需求选择是否使用这个方法。

Java Vector Java Vector