繁体   English   中英

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

[英]Most Efficient Way to Remove Objects With Null Attributes From a List

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

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

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

在Java 8中:

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

在以前的版本中:

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

另请参阅迭代在java中从集合中删除项目 (您显示的for循环可能会抛出ConcurrentModificationException 。)

这两个有效,因为它们允许集合以他们想要的方式进行迭代和删除,但我不认为这里特别重要,除非你有一个巨大的集合并且做了很多。

至于如何将这些可能是更好的例子,代码中的问题显示的时间复杂度为差链表(类似于O(n 2 /2)为最坏的情况下,我认为),因为在调用objects.remove需要另一个遍历。 使用Iterator可以使列表在不进行遍历的情况下执行删除操作。

但是,对于ArrayList ,使用Iterator仍然很差,因为元素每次都会移位。 Java 8版本是最好的。 ArrayList使用BitSet并一次完成移位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM