行业资讯 2025年08月6日
0 收藏 0 点赞 160 浏览 1488 个字
摘要 :

文章目录 1.语法 2.使用retainAll()方法的Java程序 3. retainAll()方法的工作原理 在Java中,ArrayList.retainAll()方法仅保留在此列表中包含在指定集合中的元素,即两……




  • 1.语法
  • 2.使用retainAll()方法的Java程序
  • 3. retainAll()方法的工作原理

在Java中,ArrayList.retainAll()方法仅保留在此列表中包含在指定集合中的元素,即两个集合元素的交集。列表中的所有其他元素都将被删除。这个方法与removeAll()方法正好相反,removeAll()方法是求差集。

1.语法

使用retainAll()方法的语法如下:

boolean retainAll(Collection<?> c);
  • 方法参数 – 包含要从此列表中保留的元素的集合。
  • 方法返回 – 如果此列表因调用而更改,则返回true。
  • 方法抛出 – 如果此列表的元素类与指定的集合不兼容,则可能抛出ClassCastException。如果此列表包含一个null元素,而指定的集合不允许null元素,则也可能抛出NullPointerException。

2.使用retainAll()方法的Java程序

在以下程序中,我们有两个列表。当我们调用list1.retainAll(list2)时,程序会将list1中仅保留那些也存在于list2中的元素。

List<Integer> list1 = new ArrayList<>(Stream.of(1, 2, 3, 4, 5).toList());
List<Integer> list2 = new ArrayList<>(Stream.of(1, 2, 3, 6, 7).toList());
list1.retainAll(list2);
System.out.println(list1);  //[1, 2, 3]
System.out.println(list2);  //[1, 2, 3, 6, 7]

3. retainAll()方法的工作原理

在内部,retainAll()方法会迭代列表的所有元素。对于每个元素,它将元素传递给参数集合的contains()方法。

如果在参数集合中找不到该元素,则重新排列索引。如果找到该元素,则保留该元素在后台数组中。

public boolean retainAll(Collection<?> c) {
    Objects.requireNonNull(c);
    return batchRemove(c, true);
}
private boolean batchRemove(Collection<?> c, boolean complement) {
    final Object[] elementData = this.elementData;
    int r = 0, w = 0;
    boolean modified = false;
    try {
        for (; r < size; r++)
            if (c.contains(elementData[r]) == complement)
                elementData[w++] = elementData[r];
    } finally {
        // Preserve behavioral compatibility with AbstractCollection,
        // even if c.contains() throws.
        if (r != size) {
            System.arraycopy(elementData, r,
                             elementData, w,
                             size - r);
            w += size - r;
        }
        if (w != size) {
            // clear to let GC do its work
            for (int i = w; i < size; i++)
                elementData[i] = null;
            modCount += size - w;
            size = w;
            modified = true;
        }
    }
    return modified;
}

这就是Java中ArrayList retainAll()方法的全部内容。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9343.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号