JAVA 集合架構最佳化之list.removeAll大資料量最佳化

來源:互聯網
上載者:User

標籤:list   removeall大資料量最佳化   補集   

今天在公司做項目需要求兩個集合的補集,考慮到collection類有removeAll方法,決定採用這種方式;結果程式一直卡在那兒不動了;

資料量是兩個集合的資料差不多都有60萬,直接導致程式處於假死狀態(程式當然是還在運行);

出現問題始終要解決的,我又給程式修改為先用retainAll求交集,然後再removeAll的方式,效果不明顯(事實是也假死了),我的應用程式情境還要求即時性,沒辦法只能從其他方面找尋思路了;

  • 既然removeAll執行效率低,我就改成迴圈remove試試看,結果是效率上有了一定的提升(在此需要注意list要倒序迴圈,因為remove是刪除了下標,刪除了之後後邊的元素會前移),但是效果仍然不明顯;
  • 另外一種是採用Iterator迭代器,這種方式我們僅需要對iterator進行迴圈,然後對需要刪除的元素執行iterator.remove(iterator.next()),而無需關注下標的問題;

結合list的特性,LinkedList插入更新效率高,ArrayList查詢效率高,對這裡的使用情境我們顯然需要將集合轉換成LinkedList

以下是我對list的最佳化工具類,執行結果較其他方法不是一個數量級的提升!,代碼如下

package com.wyg.collection;import java.util.List;import java.util.LinkedList;import java.util.HashSet;import java.util.Iterator;public class RemoveAllProfile{public static List removeAll(List src,List oth){LinkedList result = new LinkedList(src);//大集合用linkedlistHashSet othHash = new HashSet(oth);//小集合用hashsetIterator iter = result.iterator();//採用Iterator迭代器進行資料的操作while(iter.hasNext()){if(othHash.contains(iter.next())){iter.remove();}}return result;}}


JAVA 集合架構最佳化之list.removeAll大資料量最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.