retainall java
一、概述
在Java集合框架中,retainAll()
方法用于求两个集合的交集。它的作用是保留当前集合中与指定集合中相同的元素,删除其他元素。本文将详细介绍retainAll()
方法的使用、源码分析以及示例代码的运行结果。
二、用法
retainAll()
方法是Java集合框架中提供的一种用于求两个集合交集的方法。它可以被List
、Set
、Queue
等集合类使用。方法的定义如下:
boolean retainAll(Collection<?> c)
该方法将会保留当前集合中与指定集合c
相同的元素,删除其他元素,并返回一个boolean
值表示是否修改了当前集合。
三、源码分析
在retainAll()
方法的源码中,我们可以看到它的实现原理。以下是retainAll()
方法的源码片段:
public boolean retainAll(Collection<?> c) {
Objects.requireNonNull(c);
boolean modified = false;
Iterator<E> it = iterator();
while (it.hasNext()) {
if (!c.contains(it.next())) {
it.remove();
modified = true;
}
}
return modified;
}
在源码中,首先进行了非空判断,保证参数c
不为null
。然后通过迭代器Iterator
遍历当前集合,判断当前元素是否存在于指定集合c
中。如果不存在,则通过迭代器的remove()
方法将当前元素从集合中删除,并将modified
标志置为true
,表示集合已经被修改。最后返回modified
,表示是否修改了当前集合。
四、示例代码
1. 使用ArrayList
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class RetainAllExample1 {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(2, 4, 6));
boolean modified = list1.retainAll(list2);
System.out.println("Modified: " + modified);
System.out.println("List1: " + list1);
}
}
运行结果:
Modified: true
List1: [2, 4]
在上述示例中,我们创建了两个ArrayList
对象list1
和list2
,分别包含了一些整数元素。然后调用list1.retainAll(list2)
方法,求两个集合的交集。由于list1
中只有2和4与list2
中的元素相同,因此其他元素被删除,集合list1
被修改。最后打印出修改标志modified
的值和修改后的list1
。
2. 使用HashSet
import java.util.HashSet;
import java.util.Set;
public class RetainAllExample2 {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
set1.add("apple");
set1.add("banana");
set1.add("orange");
Set<String> set2 = new HashSet<>();
set2.add("banana");
set2.add("grape");
boolean modified = set1.retainAll(set2);
System.out.println("Modified: " + modified);
System.out.println("Set1: " + set1);
}
}
运行结果:
Modified: true
Set1: [banana]
在上述示例中,我们创建了两个HashSet
对象set1
和set2
,分别包含了一些字符串元素。然后调用set1.retainAll(set2)
方法,求两个集合的交集。由于set1
中只有”banana”与set2
中的元素相同,因此其他元素被删除,集合set1
被修改。最后打印出修改标志modified
的值和修改后的set1
。
五、总结
通过本文,我们了解了retainAll()
方法的使用和源码原理。它是Java集合框架中非常有用的方法,用于求两个集合的交集。我们可以使用retainAll()
方法来操作List
、Set
等集合,保留与指定集合相同的元素。