删除列表中空元素的最快方法

时间:2014-06-17 21:10:11

标签: java list data-structures linked-list

是否有快速删除的方法 链表中的null元素?

我知道的唯一方法是迭代 元素并删除null元素。

我不知道多线程如何帮助 - 链接列表无法直接访问其成员。

////////////////////////////////

编辑:我能想到的是将元素放入集合中然后再次返回列表。这不会保留订单,但是否则会起作用(?)

4 个答案:

答案 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;
    }