一、retainAll方法的定义
java.util.List.retainAll(Collection c)方法是用于取两个集合的交集,即保留列表中在指定集合中出现的所有元素。该方法返回一个布尔类型值,表示是否修改了调用它的列表。若果返回值为真,则意味着调用对象列表发生了修改。
二、retainAll方法与removeAll方法的区别
列表对象本身将被更改,则在retainAll和removeAll方法之间有一个重要的区别。retainAll方法保留原始集合与指定集合之间的交集,而removeAll方法删除两个集合之间的差异。
例如,假设有两个列表List1和List2,且List1包含 1, 2, 3, 4, 5, 6,而List2包含4,5,6,7,8,9。使用retainAll方法,可从List1中选择集合List2中存在的元素。 运行结果为List1=[4,5,6]。
List List1 = new ArrayList (); List1.add (1); List1.add (2); List1.add (3); List1.add (4); List1.add (5); List1.add (6); List List2 = new ArrayList (); List2.add (4); List2.add (5); List2.add (6); List2.add (7); List2.add (8); List2.add (9); List1.retainAll (List2); System.out.println ("List1 = " + List1); // List1=[4,5,6]
而如果使用removeAll方法,则从List1中删除List2存在的元素。运行结果为List1=[1,2,3]。
List1.removeAll (List2); System.out.println ("List1 = " + List1); // List1=[1,2,3]
三、retainAll方法的使用场景
1.取两个集合的交集
retainAll方法最常见的用法是取两个集合的交集。例如,现在需要找出两个集合中共有的元素。可以使用retainAll方法,一行语句搞定。
List list1 = Arrays.asList ("1","2","3","4"); List list2 = Arrays.asList ("3","4","5","6"); list1.retainAll (list2); System.out.println(list1); // 3,4
2.数据分析
retainAll方法也可以用于数据分析。例如,现在需要对两份数据进行比较,并找出其中共有的元素。可以将其中的一份数据存储在列表对象中,然后调用retainAll方法来筛选共有的元素。
// 构造两份数据 List data1 = Arrays.asList ("apple","orange","banana","pear"); List data2 = Arrays.asList ("banana","pear","watermelon","mango"); List result = new ArrayList (); result.addAll (data1); // 使用retainAll方法 result.retainAll (data2); System.out.println (result); // banana,pear
3.列表对象的规约处理
retainAll方法也适用于列表对象的规约处理。例如,现在需要将两个列表对象合并,但是其中有一些元素却相同。可以使用retainAll方法来消去重复元素。
List list1 = Arrays.asList ("apple","orange","banana","pear"); List list2 = Arrays.asList ("pineapple","pear","banana","kiwi"); // 类型转换 List result = new ArrayList(list1); result.addAll (list2); // 使用retainAll方法去重 result.retainAll (list1); System.out.println (result); // pear,banana
四、retainAll方法的注意事项
1.原始集合将被修改
在应用retainAll方法时,必须确保理解其含义,因为它将修改原始集合。因此,要先备份原始集合,以免在处理时丢失数据。
2.集合的“交”和“并”有很大区别
集合的“交”是指在两个集合中都存在的元素,而集合的“并”是指两个集合中的所有元素。如果使用retainAll方法,该方法将返回两个集合的交集。
3.调用retainAll方法可以直接修改调用者对象
retainAll方法将直接修改调用列表对象并返回一个布尔值。当返回true时,调用对象的值已被更改,当返回false时,调用对象的值没有被更改。
4.适用于类型相同的集合
retainAll方法只能在相同类型的集合之间进行操作,否则将会抛出ClassCastException异常。
五、总结
retainAll方法是对两个集合进行比较,取出它们之间的公共元素的一种便捷的方法,通常用于集合运算和数据分析。在使用retainAll方法时,必须注意它将修改原始集合。使用该方法可以优化代码体积,提高代码可读性,并减少算法的耗时。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/286203.html