簡體   English   中英

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

[英]Fastest way to remove the null elements in a list

有沒有一種快速方法可以從鏈接列表中刪除空元素?

我知道的唯一方法是對元素進行迭代並刪除空元素。

我看不到多線程有什么幫助-鏈表無法直接訪問其成員。

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

編輯:我能想到的是將元素放入集合中,然后再次返回列表。 這不會保留順序,但是其他所有方法都可以使用(?)

除非您有一個指向列表中間的迭代器,否則多線程不會有幫助* 使用ListIterator<T>簡單迭代應該可以解決問題:

ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
    if (iter.next() == null) {
        iter.remove();
    }
}

*那是在我們考慮到鏈表在沒有外部同步的情況下不是線程安全的之前。

while(list.remove(null)); 可以工作,但在大型清單上可能會變慢

編輯:在Java 8中,您可以執行list.parallelStream().filter((e)->e!=null)如果再次需要將結果作為鏈接列表,則可以執行new LinkedList(Arrays.asList(stream.toArray));

什么是最快? 最少數量的操作可能只是一次進行。 如果使用多線程,則可能必須將列表切碎並放回原處,或者獲取索引,然后反向瀏覽列表並手動刪除每個列表。

這是非常快的方法。 最壞的情況是,它比遍歷一次要慢。 在大多數情況下,速度會更快

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM