Java AbstractSequentialList中的retainAll()方法及示例
AbstractSequentialList是Java集合框架中的一个抽象类,它实现了List接口并且是线性表(Sequential List)的抽象实现。这个类提供了很多方法来帮助我们操作线性表,如插入、删除和获取元素等。
其中一个有用的方法是retainAll(),它可以用来保留此列表中存在于指定集合中的元素而删除列表中不包含在指定集合中的元素。
语法
下面是retainAll()方法的语法:
public boolean retainAll(Collection<?> c)
参数说明:
c
:将要被保留的元素的集合。
返回值:
- 如果列表发生了改变,则返回true,否则返回false。
示例
下面是一个简单示例,演示了如何使用retainAll()方法来保留两个列表中共有的元素:
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
list2.add(3);
list2.add(5);
System.out.println("list1 before retainAll(): " + list1);
System.out.println("list2: " + list2);
boolean result = list1.retainAll(list2);
System.out.println("list1 after retainAll(): " + list1);
System.out.println("retainAll() returned " + result);
}
}
该示例中,我们创建了两个列表list1和list2,并在list1中添加了1、2、3、4四个元素,在list2中添加了1、3、5三个元素。我们调用list1的retainAll()方法,将list2作为参数传入,该方法将list1中不包含在list2中的元素删除,只保留共有的元素。最后,我们输出了执行该方法后的list1和retainAll()方法的返回值。
该示例的输出如下:
list1 before retainAll(): [1, 2, 3, 4]
list2: [1, 3, 5]
list1 after retainAll(): [1, 3]
retainAll() returned true
我们可以看到,执行该方法后,list1只保留了1和3两个元素,其中这两个元素是list1和list2共有的。retainAll()方法的返回值为true,表示list1发生了改变。
总结
retainAll()方法是Java集合框架中AbstractSequentialList类提供的一个有用的方法,它可以很方便地保留列表中共有的元素并删除其他元素。我们可以将其用在很多场景中,如需要对两个列表求交集。
需要注意的是,retainAll()方法只是将列表中不包含在指定集合中的元素删除掉,而不是将列表中的元素替换为指定集合中的元素。例如,如果list1中有一个元素2,而list2中没有2这个元素,则list1.retainAll(list2)方法调用后,list1中也不会有2这个元素了,2这个元素会被删除。