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

文章目录 1.使用clear()清空ArrayList 2. 使用removeAll()清空ArrayList 3.clear()和removeAll()之间的区别 4.结论 学习如何在Java中清空一个ArrayList。清空一个列表……




  • 1.使用clear()清空ArrayList
  • 2. 使用removeAll()清空ArrayList
  • 3.clear()和removeAll()之间的区别
  • 4.结论

学习如何在Java中清空一个ArrayList。清空一个列表意味着从列表中删除所有元素。这相当于将列表重置为没有存储任何元素的初始状态。

要清空Java中的ArrayList,我们可以使用两种方法。

  • ArrayList.clear()
  • ArrayList.removeAll()

这两种方法最终都会清空列表。但它们在执行清空操作的方式上有所不同。我们看下使用clear()和removeAll()清空ArrayList的区别。

1.使用clear()清空ArrayList

以下Java程序使用clear() API清空一个ArrayList。

ArrayList<String> list = new ArrayList<>(Arrays.asList(\"a\", \"b\", \"c\", \"d\", \"e\"));
list.clear();
Assertions.assertEquals(0, list.size());

2. 使用removeAll()清空ArrayList

使用removeAll()方法删除ArrayList的所有元素的Java程序。removeAll()方法会删除当前列表中在指定集合中存在的所有元素。

在这个例子中,我们将列表的自引用传递给removeAll()方法。

ArrayList<String> list = new ArrayList<>(Arrays.asList(\"a\", \"b\", \"c\", \"d\", \"e\"));
list.removeAll(list);
Assertions.assertEquals(0, list.size());

3.clear()和removeAll()之间的区别

正如我之前所说,这两种方法都可以清空一个列表。但它们的不同之处在于它们如何清空列表。让我们看看这两种方法的代码,以了解它们执行的操作。

clear()方法很简单。它遍历列表并将每个索引分配为null。

public void clear()
{
    // clear to let GC do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}

在removeAll()方法中,它首先使用contains()方法检查元素是否存在。如果元素存在,则将其从列表中删除。这对所有循环中的元素都有效。

public boolean removeAll(Collection<?> c) {
    Objects.requireNonNull(c);
    return batchRemove(c, false);
}
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;
}

4.结论

通过查看这两种方法的源代码,我们可以安全地说,clear()方法的性能要好得多,因为它执行的语句数量较少。

由于对contains()方法的额外调用,removeAll()方法在性能上表现不佳。但是,在某些情况下,如合并两个ArrayList而不包含重复元素,removeAll()方法仍然很有用。

微信扫一扫

支付宝扫一扫

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

管理员

相关推荐
2025-08-06

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

988
2025-08-06

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

465
2025-08-06

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

348
2025-08-06

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

456
2025-08-06

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

517
2025-08-06

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

832
发表评论
暂无评论

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

助力内容变现

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

点击联系客服

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

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号