日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java 較大數據量取差集,list.removeAll性能優化詳解

瀏覽:123日期:2022-08-23 18:40:13

今天在優化項目中的考勤同步功能時遇到將考勤機中的數據同步到數據庫,

兩邊都是幾萬條數據的樣子,老代碼的做法差不多半個小時,優化后我本機差不多40秒,服務器速度會更加理想。

兩個數據集取差集首先想到的方法便是List.removeAll方法,但是實驗發現jdk自帶的List.removeAll效率很低

List.removeAll效率低原因:

List.removeAll效率低和list集合本身的特點有關 :

List底層數據結構是數組,查詢快,增刪慢

1.List.contains()效率沒有hashset高

arrayList.removeAll底層是for循化調用contains方法。arrayList雖然用get(index)方法查詢效率高,但是若用contains方法查詢對象元素,Set集合應該比List效率要高。

因為hashset的contains方法其實是先調用每個元素的hashCode()方法來返回哈希碼,如果哈希碼的值相等的情況下再調用equals(obj)方法去判斷是否相等,只有在這兩個方法所返回的值都相等的情況下,才判定這個HashSet包含某個元素,而list直接調用equals(obj)方法.所以hashset效率更高。

2.arrayList.remove()效率沒有linkedList刪除效率高

arrayList底層采用數組每刪除一下元素數據后面的元素都要往前移動效率低消耗的資源也大,linkedList鏈表刪除元素只要改變前后節點的位置信息

3.采用Iterator迭代器,這種方式我們僅需要對iterator進行循環,然后對需要刪除的元素執行iterator.remove(iterator.next()),而無需關注下標的問題

改進代碼

LinkedList linkedList= new LinkedList(src);//大集合用linkedlistHashSet hashSet= new HashSet(oth);//小集合用hashsetIterator iter = linkedList.iterator();//采用Iterator迭代器進行數據的操作while(iter.hasNext()){if(hashSet.contains(iter.next())){iter.remove();}}

補充知識:JAVA獲取兩個數據量較大的ArrayList的交集、差集以及并集

測試說明:獲取firstArrayList和secondArrayList的交集、差集以及并集。實際測試中firstArrayList數據量190000,secondArrayList數據量170000.效率比較高。此處只列出少量數據。測試代碼如下:

import java.util.Set;import java.util.List;import java.util.HashSet;import java.util.TreeSet;import java.util.Iterator;import java.util.ArrayList;import java.util.LinkedList;public class getSet { public static void main(String args[]) { getList(); } // 獲取兩個ArrayList的差集、交集、去重并集(數據量大小不限制) private static void getList() { List<String> firstArrayList = new ArrayList<String>(); List<String> secondArrayList = new ArrayList<String>(); List<String> defectList = new ArrayList<String>();//差集List List<String> collectionList = new ArrayList<String>();//交集List List<String> unionList = new ArrayList<String>();//去重并集List try { firstArrayList.add('aaa'); firstArrayList.add('bbb'); firstArrayList.add('ccc'); firstArrayList.add('ddd'); secondArrayList.add('bbb'); secondArrayList.add('ccc'); secondArrayList.add('eee'); // 獲取差集 defectList = receiveDefectList(firstArrayList, secondArrayList); Iterator<String> defectIterator = defectList.iterator(); System.out.println('===================差集==================='); while(defectIterator.hasNext()) { System.out.println(defectIterator.next()); } // 獲取交集 collectionList = receiveCollectionList(firstArrayList, secondArrayList); Iterator<String> collectionIterator = collectionList.iterator(); System.out.println('===================交集==================='); while(collectionIterator.hasNext()) { System.out.println(collectionIterator.next()); } // 獲取去重并集 unionList = receiveUnionList(firstArrayList, secondArrayList); Iterator<String> unionIterator = unionList.iterator(); System.out.println('===================去重并集==================='); while(unionIterator.hasNext()) { System.out.println(unionIterator.next()); } }catch(Exception e) { e.printStackTrace(); } } /** * @方法描述:獲取兩個ArrayList的差集 * @param firstArrayList 第一個ArrayList * @param secondArrayList 第二個ArrayList * @return resultList 差集ArrayList */ public static List<String> receiveDefectList(List<String> firstArrayList, List<String> secondArrayList) { List<String> resultList = new ArrayList<String>(); LinkedList<String> result = new LinkedList<String>(firstArrayList);// 大集合用linkedlist HashSet<String> othHash = new HashSet<String>(secondArrayList);// 小集合用hashset Iterator<String> iter = result.iterator();// 采用Iterator迭代器進行數據的操作 while(iter.hasNext()){ if(othHash.contains(iter.next())){ iter.remove(); } } resultList = new ArrayList<String>(result); return resultList; } /** * @方法描述:獲取兩個ArrayList的交集 * @param firstArrayList 第一個ArrayList * @param secondArrayList 第二個ArrayList * @return resultList 交集ArrayList */ public static List<String> receiveCollectionList(List<String> firstArrayList, List<String> secondArrayList) { List<String> resultList = new ArrayList<String>(); LinkedList<String> result = new LinkedList<String>(firstArrayList);// 大集合用linkedlist HashSet<String> othHash = new HashSet<String>(secondArrayList);// 小集合用hashset Iterator<String> iter = result.iterator();// 采用Iterator迭代器進行數據的操作 while(iter.hasNext()) { if(!othHash.contains(iter.next())) { iter.remove(); } } resultList = new ArrayList<String>(result); return resultList; } /** * @方法描述:獲取兩個ArrayList的去重并集 * @param firstArrayList 第一個ArrayList * @param secondArrayList 第二個ArrayList * @return resultList 去重并集ArrayList */ public static List<String> receiveUnionList(List<String> firstArrayList, List<String> secondArrayList) { List<String> resultList = new ArrayList<String>(); Set<String> firstSet = new TreeSet<String>(firstArrayList); for(String id : secondArrayList) { // 當添加不成功的時候 說明firstSet中已經存在該對象 firstSet.add(id); } resultList = new ArrayList<String>(dawjidSet); return resultList; }}

打印結果:

===================差集===================aaaddd===================交集===================bbbccc=================去重并集==================aaabbbcccdddeee

說明,取差集指的是取firstArrayList中存在但secondArrayList中不存在的數據集

以上這篇java 較大數據量取差集,list.removeAll性能優化詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产综合婷婷| 欧美日韩国产亚洲一区| 亚洲天堂成人| 欧美精品九九| 在线精品视频一区| 日韩久久一区二区三区| 一区二区视频欧美| 久久在线免费| 久久久久久久久丰满| 国模 一区 二区 三区| 亚洲精品2区| 一区二区三区网站| 国产欧美精品| 国产一区二区三区视频在线| 91嫩草亚洲精品| 日韩午夜av在线| 日本a级不卡| 国产在线一区不卡| 99精品在线观看| 美国三级日本三级久久99| 亚洲精品影视| 国产在线观看91一区二区三区 | 麻豆精品新av中文字幕| 国产精品99一区二区三区| 亚洲成av人片一区二区密柚 | 日本蜜桃在线观看视频| 91精品高清| 国产精品www.| 国产真实久久| 欧美精品国产白浆久久久久| 97精品国产| 亚洲免费一区三区| 中文字幕成在线观看| 亚洲精品免费观看| 国产一区日韩一区| 亚欧洲精品视频在线观看| 亚洲国产福利| 青青草视频一区| 自由日本语亚洲人高潮| 国产精品综合色区在线观看| 不卡中文一二三区| 精品91福利视频| 亚洲tv在线| 国产亚洲午夜| 婷婷激情一区| 久久三级中文| 欧美日本不卡| 日韩中文字幕视频网| 亚洲福利专区| 欧美香蕉视频| 国产精品久久久免费| 亚洲精品极品| 亚洲人成网77777色在线播放| 亚洲香蕉网站| 久久久久美女| 日韩精品麻豆| 理论片午夜视频在线观看| 国产精品中文字幕制服诱惑| 天堂精品久久久久| 涩涩涩久久久成人精品| 亚洲精品第一| 久久国产麻豆精品| 国产精品最新自拍| 国产精品一区亚洲| 国产精品一区二区免费福利视频| 欧美专区一区二区三区| 亚洲美洲欧洲综合国产一区| 五月天久久久| 中文字幕视频精品一区二区三区 | 国产精品久久| 精品久久久久中文字幕小说| 激情久久99| 丝袜美腿诱惑一区二区三区| 久久视频一区| 国产一区导航| 亚洲专区视频| 国产精品天天看天天狠| 久久97久久97精品免视看秋霞| 欧美激情五月| 精品久久91| 亚洲国产一区二区三区在线播放| 噜噜噜久久亚洲精品国产品小说| 亚洲精品观看| 精品无人区麻豆乱码久久久| 日韩中文首页| 亚洲毛片在线| 精品少妇av| 在线一区欧美| 欧美国产极品| av不卡在线看| 另类欧美日韩国产在线| 久久精品青草| 视频一区日韩精品| 亚洲风情在线资源| 亚洲欧美日韩在线观看a三区| 日韩va欧美va亚洲va久久| 日韩欧美三级| 国产乱码精品一区二区三区亚洲人| av免费不卡国产观看| 亚洲精品伦理| 极品日韩av| 成人黄色av| 国产调教精品| 亚洲一区日韩| 亚洲精品.com| 成人亚洲精品| 欧美天堂一区二区| 久久亚洲视频| 亚洲夜间福利| 国产精品久久久久久久久久妞妞| 亚洲综合不卡| 久久精品青草| 亚洲黄色中文字幕| 欧美激情99| 日韩精品a在线观看91| 成人羞羞在线观看网站| 美女免费视频一区| 久久国产婷婷国产香蕉| 一区二区国产在线| 国产午夜精品一区二区三区欧美 | 一区二区国产在线| 视频一区二区国产| 日韩理论片av| 精品捆绑调教一区二区三区| 另类欧美日韩国产在线| 麻豆久久一区| 福利一区和二区| 久久久久久一区二区| 国产成人免费视频网站视频社区| 国产精品乱战久久久| 麻豆一区二区三| 老司机精品视频在线播放| 久久福利在线| 久久麻豆视频| 欧洲av不卡| 九一国产精品| 丝袜亚洲另类欧美| 精品91久久久久| 日韩欧美中文字幕电影| 欧美有码在线| 精品高清久久| 精品一区免费| 日本欧美大码aⅴ在线播放| 国产精品欧美三级在线观看| 国产精品久久久久久久久免费高清| 欧美经典一区| 欧美~级网站不卡| 久久亚洲精品伦理| 久久中文字幕一区二区三区| 另类专区亚洲| 亚洲一区有码| 免费在线观看一区| 97精品国产| 男女精品网站| 国产一区二区三区视频在线| 亚洲v在线看| 亚洲男人在线| 99精品小视频| 国产精品尤物| 日韩视频二区| 国产精品香蕉| 乱人伦精品视频在线观看| 久久99久久久精品欧美| 欧美特黄a级高清免费大片a级| 日韩av不卡在线观看| 伊人精品一区| 久久久91麻豆精品国产一区| 特黄特色欧美大片| 久久国产乱子精品免费女| 香蕉久久99| 激情中国色综合| 欧美在线91| 亚洲ww精品| 午夜久久黄色| 欧美激情三区| 国产视频网站一区二区三区| 亚洲欧美一区在线| 国产成人77亚洲精品www| 日本天堂一区| 中文一区一区三区免费在线观 | 国产aⅴ精品一区二区四区| 免费观看在线综合色| 日韩一区三区| 精品国产乱码久久久| 日韩区欧美区| 综合一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频 | 久久九九电影| 欧美aa在线观看| 亚洲伊人av| 日韩中文影院| 麻豆视频一区| 精品无人区麻豆乱码久久久| 欧美日韩一区二区三区四区在线观看| 国产精品日韩久久久| 99亚洲精品| 亚洲综合图色| 日韩三级精品| 国产高清日韩| 高清av不卡|