从列表中删除具有空属性的对象的最有效方法

时间:2015-05-06 22:48:39

标签: java performance list loops collections

所以我想知道在java中是否有更有效的方法来做到这一点?假设当前填充了对象列表......

for (Object obj : objects) {
   if (obj.getAttribute() == null) {
      objects.remove(obj);
   }
}

基本上,如果该列表中的对象包含特定的null属性,我只希望能够从给定列表中删除任何对象。想法?

1 个答案:

答案 0 :(得分:3)

在Java 8中:

objects.removeIf(o -> o.getAttribute() == null);

在以前的版本中:

for (Iterator<MyObject> it = objects.iterator(); it.hasNext();) {
    if (it.next().getAttribute() == null)
        it.remove();
}

另见Removing items from a collection in java while iterating over it。 (您显示的for循环可以抛出ConcurrentModificationException。)

这两个 效率,因为它们允许集合以他们想要的方式进行迭代和删除,但我不认为它是<除非你有一个巨大的收藏品并且做了很多这样的事情,所以在这里尤为重要

作为如何更好的示例,问题所显示的代码的链接列表的时间复杂度很差(我认为最坏的情况,如O(n2/2))因为调用{{1}需要另一次遍历。使用objects.remove可让列表在不进行遍历的情况下进行删除。

使用Iterator对于Iterator来说仍然很差,因为每次都会移动元素。 Java 8版本是最好的。 ArrayList uses a BitSet并立即进行转移。