介绍
Java中有着许多的Collection接口,而其中有一个非常常用的方法就是retainAll()
方法。这个方法可以帮助开发人员在两个集合中找到相同的元素,让我们来看看这个方法到底是如何使用的吧。
正文
一、retainAll()方法概述
retainAll()
方法是集合中的一个方法,返回值是boolean
类型,用来计算并返回调用该方法所属对象和指定参数对象的交集是否成功,也就是说,返回的是操作是否成功。如果成功,则调用该方法的对象会保存交集,否则,它将保留原始状态。
二、使用retainAll()方法
使用retainAll()
方法非常简单,只需要使用集合对象调用retainAll()
方法并将另一个集合对象作为参数传入即可。以下就是一个简单的代码示例:
List<String> list1 = new ArrayList<String>();
list1.add("A");
list1.add("B");
list1.add("C");
List<String> list2 = new ArrayList<String>();
list2.add("B");
list2.add("C");
list2.add("D");
System.out.println("list1:" + list1);
System.out.println("list2:" + list2);
list1.retainAll(list2);
System.out.println("list1:" + list1);
上面这段代码中,我们定义了两个List集合对象,其中一个里包含了A、B、C三个元素,另一个含有B、C、D三个元素。我们将两个List集合对象传入retainAll()
方法,然后输出结果,如下所示:
list1:[A, B, C]
list2:[B, C, D]
list1:[B, C]
可以看到,retainAll()
方法返回了true
,并且集合list1
只包含了B
和C
。
三、retainAll()方法和equals()的关系
retainAll()
方法在执行时候并不会调用equals()
方法,它只是通过hashCode()
方法和==
来判断元素是否相等,所以使用retainAll()
方法时需要注意这一点。如果你想通过equals()
来判断元素是否相等,可以考虑使用Java 8 的Stream API来实现,代码示例如下:
list1.stream().filter(list2::contains).collect(Collectors.toList());
上面这段代码用到了Stream API的filter()
方法和collect()
方法。首先调用了list1
集合的stream()
方法,然后通过filter()
方法,筛选出包含在list2
中的元素,最后使用collect()
方法将筛选出来的元素收集到一个List集合对象中。
四、与removeAll()方法的区别
与removeAll()
方法类似,retainAll()
方法也可以用来取交集,但是它与removeAll()
方法还是有些不同的。其主要区别在于:retainAll()
方法会改变集合本身,而removeAll()
方法不会改变集合本身。因此,retainAll()
方法相对要危险一些,如果不小心使用,就可能会改变原本不应该被改变的集合对象。所以在使用这个方法时一定要小心。
结论
Java中的retainAll()
方法是一个很有用的方法,它可以获取两个集合中的交集。不过在使用时需要注意它与equals()
方法的区别,以及使用它可能会对集合本身进行更改的特性。