Java中的List retainAll()方法及示例

Java中的List retainAll()方法及示例

在Java中,List是常见的数据结构之一。List中提供了许多方法来操作其元素,其中包括retainAll()方法。

这个retainAll()方法,在List中的作用是求交集,即保留List中与传入参数List中相同的元素,其余元素删除。下面我们来看一下具体的用法及示例。

retainAll()方法的用法

retainAll()方法的定义如下:

public boolean retainAll(Collection<?> c)

参数c是一个Collection类型,表示将与当前List求交集的List。

执行完retainAll()方法后,原List中的元素就都变成了与参数c相交的元素,没有与参数c相交的元素会被删除。同时,此方法返回一个boolean类型的值,表示执行操作后List是否改变。如果List发生了改变,则返回true,反之返回false。

代码示例

以下是一个简单的示例代码,详细演示了如何使用retainAll()方法。代码中定义了两个List,分别为list1和list2。这两个List中都包含了一些数字元素。代码首先输出了list1和list2的原始数据,随后调用retainAll()方法保留两个List中的交集,输出交集后的list1。

import java.util.ArrayList;
import java.util.List;

public class RetainAllDemo {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        for (int i = 1; i <= 10; i++) {
            list1.add(i);
            if (i % 2 == 0)
                list2.add(i);
        }

        System.out.println("list1原始数据:" + list1);
        System.out.println("list2原始数据:" + list2);

        boolean isChanged = list1.retainAll(list2);
        System.out.println("是否变化:" + isChanged);
        System.out.println("list1交集后的数据:" + list1);
    }
}

输出结果如下:

list1原始数据:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2原始数据:[2, 4, 6, 8, 10]
是否变化:true
list1交集后的数据:[2, 4, 6, 8, 10]

在上述示例中,执行retainAll()方法后,list1仅保留了与list2中相同的元素,即2、4、6、8和10。这也符合retainAll()方法的定义。

注意事项

在使用retainAll()方法时,需要注意一些事项。

首先,在执行retainAll()方法前,必须保证当前List与参数c都是兼容的,即他们要么都是存储基本数据类型(如int、long等),要么都是存储对象的引用地址。否则,在程序执行时就会抛出ClassCastException异常。例如,在上面的示例代码中,list1和list2都是存储的Integer类型的元素,因此可以放心地使用retainAll()方法。

其次,List中的元素不能为null。如果List中有元素为null,会直接抛出NullPointerException异常。

最后,如果List中的元素重复,会导致retainAll()方法产生一些意外的结果。例如,如果list1中含有两个1,而list2中只有一个1,则会导致list1中保留了两个1。为了避免此类情况,建议在使用retainAll()方法前,先将List中的元素去重复,可以使用Set集合来达到这个目的。

结论

在Java的List中,retainAll()方法能帮助我们求出两个List的交集,是一个非常实用的方法。在使用时需注意上述几点事项,以免出现不必要的错误和异常。同时,需要注意有效利用该方法可以简化代码实现,提高程序效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程