是否有快速删除的方法 链表中的null元素?
我知道的唯一方法是迭代 元素并删除null元素。
我不知道多线程如何帮助 - 链接列表无法直接访问其成员。
////////////////////////////////
编辑:我能想到的是将元素放入集合中然后再次返回列表。这不会保留订单,但是否则会起作用(?)
答案 0 :(得分:3)
除非你有一个指向列表中间的迭代器,否则多线程不会帮助 * 。使用ListIterator<T>
的简单迭代应该可以解决这个问题:
ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
if (iter.next() == null) {
iter.remove();
}
}
* 在我们考虑到没有外部同步的情况下链表不是线程安全之前。
答案 1 :(得分:0)
while(list.remove(null));
会起作用,但在大型列表中可能会很慢
编辑:在java 8中,如果您需要将结果再次作为链接列表,则可以执行list.parallelStream().filter((e)->e!=null)
new LinkedList(Arrays.asList(stream.toArray));
答案 2 :(得分:0)
你最快的意思是什么?最少的操作可能只是一个接一个地进行。如果您使用多线程,您可能需要切断列表并将其重新组合在一起或获取索引,然后反向浏览列表并手动删除每个列表。
答案 3 :(得分:0)
这是非常快的方式。最糟糕的情况虽然它会比仅仅遍历一次更慢。在大多数情况下,它会更快
ArrayList a = new ArrayList<Integer>();
Collections.sort(a);
for(int i=a.size()-1; i>-1; i--)
{
if(a.get(i)==null)
a.remove(i);
else
break;
}