Java中的 ArrayList retainAll() 方法
retainAll() 方法是用于删除所有不包含在指定集合中的数组列表元素或保留与传递给方法的Collection列表中的所有元素匹配的当前 ArrayList 实例中匹配的所有元素的方法。
语法:
public boolean retainAll(Collection C)
参数: C 是包含要在列表中保留的元素的集合。
返回值: 如果列表因调用而更改,则该方法返回true,否则返回false。
异常情况:
- ClassCastException: 如果此ArrayList的元素类与Passed collection不兼容,则报此错误。这是可选的。
- NullPointerException: 如果列表包含null element而传递的collection不允许null element或指定的collection为null则为null。这也是可选的。
以下程序演示了Java.util.ArrayList.retainAll()方法:
程序 1: 将ArrayList集合作为参数传递给方法。
// Java code to illustrate retainAll() method
import java.util.ArrayList;
public class GFG {
public static void main(String[] args)
{
// Creating an empty array list
ArrayList<String> bags = new ArrayList<String>();
// Add values in the bags list.
bags.add("pen");
bags.add("pencil");
bags.add("paper");
// Creating another array list
ArrayList<String> boxes = new ArrayList<String>();
// Add values in the boxes list.
boxes.add("pen");
boxes.add("paper");
boxes.add("books");
boxes.add("rubber");
// Before Applying method print both lists
System.out.println("Bags Contains :" + bags);
System.out.println("Boxes Contains :" + boxes);
// Apply retainAll() method to boxes passing bags as parameter
boxes.retainAll(bags);
// Displaying both the lists after operation
System.out.println("\nAfter Applying retainAll()"+
" method to Boxes\n");
System.out.println("Bags Contains :" + bags);
System.out.println("Boxes Contains :" + boxes);
}
}
输出:
Bags Contains :[pen, pencil, paper]
Boxes Contains :[pen, paper, books, rubber]
After Applying retainAll() method to Boxes
Bags Contains :[pen, pencil, paper]
Boxes Contains :[pen, paper]
程序2: 将Collection参数传递给不同于ArrayList的方法
// 演示retainAll()方法的程序,将Collection作为方法的参数,而不是ArrayList
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// 创建一个空的HashSet
HashSet<String> bags = new HashSet<String>();
// 在bags集合中添加值
bags.add("pen");
bags.add("ink");
bags.add("paper");
// 创建另一个空的ArrayList
ArrayList<String> boxes = new ArrayList<String>();
// 在boxes列表中添加值
boxes.add("pen");
boxes.add("paper");
boxes.add("books");
boxes.add("rubber");
boxes.add("ink");
// 在应用方法之前打印两个列表和集合
System.out.println("Bags Contains :" + bags);
System.out.println("Boxes Contains :" + boxes);
// 将参数传递给boxes中的retainAll()方法
boxes.retainAll(bags);
// 在操作后显示两个列表
System.out.println("\nAfter Applying retainAll()" +
" method to Boxes\n");
System.out.println("Bags Contains :" + bags);
System.out.println("Boxes Contains :" + boxes);
}
}
输出:
Bags Contains :[paper, ink, pen]
Boxes Contains :[pen, paper, books, rubber, ink]
After Applying retainAll() method to Boxes
Bags Contains :[paper, ink, pen]
Boxes Contains :[pen, paper, ink]
程序三: 演示retainAll()方法抛出的错误
// 说明retainAll()方法抛出的错误的程序
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// 创建一个空的ArrayList
ArrayList<Integer> list1 = null;
// 创建另一个空的ArrayList
ArrayList<String> list2 = new ArrayList<String>();
// 在list2列表中添加值
list2.add("pen");
list2.add("paper");
list2.add("books");
list2.add("rubber");
// 在应用方法之前打印两个列表
System.out.println("list1 Contains :" + list1);
System.out.println("list2 Contains :" + list2);
// 将参数传递给list2中的retainAll()方法
list2.retainAll(list1);
// 在操作后显示两个列表
System.out.println("\nAfter Applying retainAll()"+
" method to list2\n");
System.out.println("list1 Contains :" + list1);
System.out.println("list2 Contains :" + list2);
}
}
输出:
list1 Contains :null
list2 Contains :[pen, paper, books, rubber]
运行时错误:
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.ArrayList.retainAll(ArrayList.java:714)
at GFG.main(GFG.java:26)
参考:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#retainAll(java.util.Collection)
极客教程