【发布时间】:2012-10-30 06:40:16
【问题描述】:
如果满足特定条件,我想从 Java 中的 ArrayList 中删除一个元素。
即:
for (Pulse p : pulseArray) {
if (p.getCurrent() == null) {
pulseArray.remove(p);
}
}
我可以理解为什么这不起作用,但是有什么好的方法可以做到这一点?
【问题讨论】:
-
这不仅会失败,而且即使它确实有效,它的性能也会很糟糕。这是一种 O(n^2) 算法,因为您必须检查数组的每个元素,直到要删除的元素。最优算法是 O(n)。
-
@MarkByers“检查数组的每个元素”是O(n),为什么你认为这是O(n^2)?
-
@jlordo:
list.remove(object)是一个 O(n) 操作。它被执行 O(n) 次,因为它处于循环中。这给出了 O(n*n)。 -
@MarkByers 谢谢。我认为
remove(Object)是 O(1),但文档证明了你的观点。