gpt4 book ai didi

java - 在java中,iter.remove()或collection.clear()哪个更适合读取和删除整个集合?

转载 作者:行者123 更新时间:2023-12-02 13:01:23 25 4
gpt4 key购买 nike

比较

    synchronized (countList) {
while (iter.hasNext()) {
Entry<Long, Long> entry = iter.next();
if(entry.getVaue>0)
entry.output();
}
countList.clear();
}

    synchronized (countList) {
while (iter.hasNext()) {
Entry<Long, Long> entry = iter.next();
if(entry.getVaue>0)
entry.output();
iter.remove();
}
}

真的有区别吗?我猜测垃圾回收可能更适合 collection.clear 方法。

最佳答案

在某些情况下,通过迭代器进行 N remove() 会产生 O(N log N),甚至更糟,O(N^2) 性能(例如在 ArrayList 上)。我想不出在任何情况下 clear() 都会表现得如此糟糕。

我想说 clear() 可能更好。它作为一个操作完成,因此实现可以更好地优化它,因为它不是对 remove() 所在的集合的增量修改(需要维护不变量等)。

此外,集合迭代器必须防范 IllegalStateException 和/或 ConcurrentModificationException。使用 N remove() ,即 N 检查,可以累加。最后,提醒一下,并非所有迭代器都支持 remove()

这样想:

  • N remove() 操作是通过中间人(迭代器)完成的,它会在集合变空之前将其置于 N 种不同的状态
  • 1 clear() 是对集合的直接操作,并且只有 1 次状态转换

关于java - 在java中,iter.remove()或collection.clear()哪个更适合读取和删除整个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2339209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com