【Java】集合框架優化【list.removeAll】大數據量優化

求兩個集合的補集,考慮到collection類有removeAll方法,決定採用這種方式;結果程序卡死;
數據量是兩個集合的數據差不多都有60萬,直接導致程序處於假死狀態(程序當然是還在運行);
又給程序修改爲先用retainAll求交集,然後再removeAll的方式,效果不明顯(事實是也假死了),我的應用場景還要求實時性,沒辦法只能從其他方面找尋思路了;

  1. removeAll執行效率低,改成循環remove試試看,結果是效率上有了一定的提升(在此需要注意list要倒序循環,因爲remove是刪除了下標,刪除了之後後邊的元素會前移),但是效果仍然不明顯;
  2. 另外一種是採用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);//大集合用linkedlist
		HashSet othHash = new HashSet(oth);//小集合用hashset
		Iterator iter = result.iterator();//採用Iterator迭代器進行數據的操作
		while(iter.hasNext()){
			if(othHash.contains(iter.next())){
				iter.remove();			
			}	
		}
		return result;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章