Java Vector retainAll() 方法
retainAll()
方法是 Java 中 Vector
类提供的一个集合操作方法,它用于保留当前向量中与指定集合相同的元素,移除所有其他元素。换句话说,这个方法会修改当前向量,使其仅包含与指定集合共有的元素。
方法语法:
public boolean retainAll(Collection<?> c)
方法参数
retainAll()
方法接受一个参数:
Collection<?> c
:包含要保留元素的集合。这个集合可以是任何实现了Collection
接口的对象,如ArrayList
、HashSet
等。
返回值
该方法返回一个布尔值:
true
:如果当前向量因调用此方法而发生了改变(即有元素被移除)false
:如果当前向量没有发生任何改变(即所有元素都已存在于指定集合中)
方法行为
当调用 retainAll()
方法时,会发生以下操作:
- 方法会遍历当前向量中的所有元素
- 对于每个元素,检查它是否存在于参数集合
c
中 - 如果元素不存在于
c
中,则从当前向量中移除该元素 - 最终,当前向量将只包含那些同时存在于向量自身和参数集合
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);
}
}
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]
注意事项
集合中的元素比较:
retainAll()
方法使用equals()
方法来比较元素是否相同。因此,对于自定义对象,确保正确实现了equals()
和hashCode()
方法。参数集合为 null:如果参数集合
c
为 null,会抛出NullPointerException
。并发修改:如果在迭代过程中修改集合(除了通过迭代器自身的
remove()
方法),可能会抛出ConcurrentModificationException
。性能考虑:对于大型集合,此方法的性能可能较低,因为它需要遍历整个集合并进行多次查找。
实际应用场景
retainAll()
方法在以下场景中特别有用:
- 数据过滤:从一个大集合中筛选出符合特定条件的元素
- 集合交集:计算两个集合的交集
- 权限控制:从用户权限列表中保留系统当前可用的权限
与相关方法的比较
方法 | 描述 | 修改当前集合 | 返回值意义 |
---|---|---|---|
retainAll() |
保留与指定集合相同的元素 | 是 | 是否发生改变 |
removeAll() |
移除与指定集合相同的元素 | 是 | 是否发生改变 |
containsAll() |
检查是否包含指定集合所有元素 | 否 | 是否全部包含 |
addAll() |
添加指定集合所有元素 | 是 | 是否发生改变 |
总结
Vector.retainAll()
是一个强大的集合操作方法,可以有效地筛选出两个集合共有的元素。理解这个方法的工作原理和适用场景,能够帮助开发者更高效地处理集合操作任务。记住要正确处理方法的返回值,并根据实际需求选择是否使用这个方法。
点我分享笔记