所以我想知道在java中是否有更有效的方法来做到这一点?假设当前填充了对象列表......
for (Object obj : objects) {
if (obj.getAttribute() == null) {
objects.remove(obj);
}
}
基本上,如果该列表中的对象包含特定的null属性,我只希望能够从给定列表中删除任何对象。想法?
答案 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
并立即进行转移。