【问题标题】:Which is more efficient? Using the same arraylist by using removeAll() or creating the new arraylist [duplicate]哪个更有效率?通过使用 removeAll() 或创建新的arraylist来使用相同的arraylist [重复]
【发布时间】:2017-09-26 07:01:38
【问题描述】:

我正在使用 arraylist 来比较我的 selenium webdriver 脚本中的元素,我在其中比较了来自两个不同页面的元素。

那么哪个更高效?

使用相同的arraylist 还是创建新的?

【问题讨论】:

  • 大多数时候我会创建一个新的 Arraylist 并让垃圾收集器在自己的好时机分解列表项引用。

标签: java selenium-webdriver collections


【解决方案1】:

removeAll()的源代码(在AbstractCollection中定义):

public boolean removeAll(Collection<?> c) {
    Objects.requireNonNull(c);
    boolean modified = false;
    Iterator<?> it = iterator();
    while (it.hasNext()) {
        if (c.contains(it.next())) {
            it.remove();
            modified = true;
        }
    }
    return modified;
}

clear()的源码(在A​​rrayList中定义):

public void clear() {
    modCount++;

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

    size = 0;
}

clear() 更快,因为它不必处理所有这些额外的方法调用,但是 我认为实例化一个新的 ArrayList 是最有效的,特别是在一个非常大的 ArrayList 中(不需要迭代集合)。

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多