Java中的 ArrayList retainAll() 方法

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 编辑器中实现连续选择操作等各种应用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程