[英]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.