Java中的 ArrayList retainAll() 方法
在 Java 的集合框架中,ArrayList 是一个非常常用的数据结构。那么,在 ArrayList 中,retainAll() 方法又是什么呢?该方法有什么作用呢?本文就为大家详细介绍。
什么是 ArrayList retainAll() 方法
ArrayList 的 retainAll() 方法是一个集合运算方法,它的作用是保留在两个集合中都存在的元素,并将其它元素移除。
在查看 retainAll() 方法的具体函数实现之前,我们来看看该方法的使用示例:
ArrayList<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
list1.add("orange");
list1.add("grape");
ArrayList<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("mango");
list2.add("strawberry");
list1.retainAll(list2);
System.out.println(list1);
上述代码运行结果为:
[banana]
从输出结果可以看出,list1 和 list2 之间的 retainAll() 方法计算结果为 [banana]。因为在 list1 和 list2 集合之中,只有 “banana” 元素同时存在于两个集合中,因此只有它作为结果输出。
retainAll() 方法的函数实现
在了解了 retainAll() 方法的使用方法之后,我们接下来再来看看这个方法是怎样工作的。
public boolean retainAll(Collection<?> c) {
boolean modified = false;
Iterator<E> iterator = iterator();
while (iterator.hasNext()) {
if (!c.contains(iterator.next())) {
iterator.remove();
modified = true;
}
}
return modified;
}
retainAll() 方法的函数实现跟 List 集合内的其它集合运算方法有类似之处,也是通过遍历调用 iterator() 方法来获取 ArrayList 集合中的元素,然后通过对比参数 c 中的元素来判断哪些元素需要移除。
需要注意的是,retainAll() 方法的返回值是 boolean 类型,表示该方法是否对 ArrayList 集合进行了修改,如果方法确实对集合进行了修改,则返回 true,否则返回 false。
retainAll() 方法的应用
retainAll() 方法是非常实用的一个 ArrayList 集合运算方法,下面就通过几个代码示例来说明其具体应用。
示例一:求两个集合的共同元素
ArrayList<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
list1.add("orange");
list1.add("grape");
ArrayList<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("mango");
list2.add("strawberry");
list1.retainAll(list2);
System.out.println(list1);
输出结果为:
[banana]
从输出结果可以看出,list1 和 list2 集合之间的 retainAll() 方法计算结果为 [banana]。因为在 list1 和 list2 集合之中,只有 “banana” 元素同时存在于两个集合中,因此只有它作为结果输出。
示例二:删除集合中的重复元素
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
list.add("banana");
HashSet<String> set = new HashSet<>(list);
list.clear();
list.addAll(set);
System.out.println(list);
输出结果为:
[orange, apple, banana]
从输出结果可以看出,HashSet 集合可以帮我们快速去除 List 集合重复元素。
示例三:在 GUI 编辑器中实现连续选择操作
ArrayList<String> selectedItems = new ArrayList<>();
selectedItems.add("item1");
selectedItems.add("item2");
selectedItems.add("item3");
ArrayList<String> items = new ArrayList<>();
items.add("item1");
items.add("item2");
items.add("item3");
items.add("item4");
items.add("item5");
// 用户在 GUI 编辑器中选择了 item1 和 item2
ArrayList<String> selectedItemsCopy = new ArrayList<>(selectedItems);
selectedItemsCopy.retainAll(Arrays.asList("item1", "item2"));
// 在 GUI 编辑器中,同时选择了 item1 和 item2 之后,自动连续选择 item3
if (selectedItemsCopy.size() == 2) {
int index1 = items.indexOf(selectedItemsCopy.get(0));
int index2 = items.indexOf(selectedItemsCopy.get(1));
if (index1 > index2) {
int temp = index1;
index1 = index2;
index2 = temp;
}
for (int i = index1 + 1; i < index2; i++) {
selectedItems.add(items.get(i));
}
}
System.out.println(selectedItems);
输出结果为:
[item1, item2, item3]
从输出结果可以看出,利用 retainAll() 方法,我们可以在用户选择 item1 和 item2 之后,自动连续选择 item3。
结论
综上所述,Java 中 ArrayList 的 retainAll() 方法是一个非常实用的集合运算方法,它可以帮助我们快速求解两个集合的共同元素,删除集合中的重复元素,以及在 GUI 编辑器中实现连续选择操作等各种应用。