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

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

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

瀏覽:122日期: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久久,三上悠亚国产精品一区二区三区
亚洲播播91| 韩国精品主播一区二区在线观看 | 伊人久久亚洲热| 精品久久影院| 国产精品日本一区二区不卡视频| 一区二区三区网站| 日韩一区二区三区免费视频| 超级白嫩亚洲国产第一| 日韩一区二区三区在线看| 亚洲综合三区| 老鸭窝毛片一区二区三区| 亚洲深夜影院| 亚洲乱码视频| 四虎精品永久免费| 日韩精品视频中文字幕| 四虎精品永久免费| 日本午夜精品| 国产精品igao视频网网址不卡日韩| 亚洲不卡视频| 国产精品三级| 日产精品一区二区| 正在播放日韩精品| 久久国产成人午夜av影院宅| 97视频热人人精品免费| 日韩精品免费一区二区三区| 91精品国产调教在线观看| 欧美亚洲国产一区| 综合国产视频| 美腿丝袜亚洲三区| 亚洲不卡av不卡一区二区| 伊人久久大香线蕉av超碰演员| 三级一区在线视频先锋| 免费看黄色91| 亚洲精品激情| 国产精品亚洲欧美一级在线| 国产精品久久久久久久免费观看| 欧美成人高清| 国产精品啊啊啊| 国产高潮在线| 亚洲三级网站| 国产在线观看91一区二区三区| 99精品在线免费在线观看| 丝袜脚交一区二区| 美日韩一区二区三区| av亚洲在线观看| 美腿丝袜在线亚洲一区| 欧美/亚洲一区| 精品亚洲a∨| 色8久久久久| 黑人精品一区| 亚洲特色特黄| 欧美特黄一级大片| 国产精品99精品一区二区三区∴| 久久高清国产| 免费一级欧美片在线观看网站 | av免费不卡国产观看| 丝袜美腿亚洲色图| 少妇精品导航| 国产中文在线播放| 国产日产一区| 亚州av一区| 精品91久久久久| 国产91精品对白在线播放| 国产精品www.| 亚洲一区二区网站| 国产精品久久久久久久免费观看| 欧美自拍一区| 日本成人在线不卡视频| 在线综合亚洲| 日韩视频免费| 亚洲色图网站| 日韩欧美美女在线观看| 香蕉久久久久久| 亚洲日本久久| 欧美一级二区| 日本在线不卡视频| 欧美日韩国产高清| 日韩午夜视频在线| 模特精品在线| 精品国产美女a久久9999| 亚洲黄色影院| 蜜臀a∨国产成人精品| 最新国产精品| 日本不卡免费高清视频在线| 久久成人一区| 日韩av在线播放网址| 在线精品一区二区| 麻豆精品蜜桃| 国产福利一区二区三区在线播放| 欧美中文字幕| 亚洲精品极品| 亚洲二区视频| 91久久中文| 在线亚洲欧美| 国产高清视频一区二区| 国产毛片久久| 91成人福利| 国产精品一国产精品k频道56| 麻豆精品国产91久久久久久| 国产一区二区三区不卡av| 久久青草久久| 亚洲精品一二| 欧美国产美女| 免费成人在线视频观看| 欧美亚洲色图校园春色| 亚洲天堂资源| 亚洲乱码视频| 日韩精品视频在线看| 免费观看日韩电影| 亚洲久久视频| 亚洲+小说+欧美+激情+另类| 国语精品一区| 国产欧美一区二区三区国产幕精品| 国产精品99视频| 亚洲视频国产精品| 国产精品99一区二区三| 天使萌一区二区三区免费观看| 国产精品乱战久久久| 亚洲激情另类| 午夜精品成人av| 欧美欧美黄在线二区| 妖精视频成人观看www| 成人av三级| 国产精品网在线观看| 亚洲一区黄色| 久久免费视频66| 日韩区一区二| 亚洲一二av| 午夜视频精品| 久久蜜桃精品| 精品国产免费人成网站| 日本免费在线视频不卡一不卡二| 久久国产精品久久久久久电车| 91精品国产成人观看| 日本不卡免费高清视频在线| 欧美一区=区三区| 奇米狠狠一区二区三区| 亚洲欧美高清| 激情自拍一区| 亚洲在线一区| 国产在线看片免费视频在线观看| 成人在线免费观看网站| 精品99久久| 日韩av首页| 欧美/亚洲一区| 午夜欧美精品| 影音先锋久久精品| 日本在线观看不卡视频| 亚洲黄色免费看| 午夜久久av| 国产伦理一区| av中文字幕在线观看第一页| 91精品一区二区三区综合在线爱| 午夜久久美女| 99riav1国产精品视频| 国产成人精品免费视| 国产精品黑丝在线播放| 亚洲一级特黄| 日本成人在线一区| 国产精品99一区二区三| 国产精品日韩| 久久精品一区二区三区中文字幕| 欧美片第1页| 日韩精品a在线观看91| av一区在线| 国产欧美在线| 91精品xxx在线观看| 喷白浆一区二区| 精品国产一区二区三区性色av| 欧美sss在线视频| 亚洲五月综合| 91tv亚洲精品香蕉国产一区| 免费在线成人网| 高清一区二区三区| 亚洲精选久久| 999久久久免费精品国产| 欧美亚洲tv| 国产毛片一区| 四虎884aa成人精品最新| 久久国产精品色av免费看| 99久久久久国产精品| 欧美日本一区| 免费看欧美美女黄的网站| 日韩国产一区| 国产日韩三级| 激情久久中文字幕| 九九99久久精品在免费线bt| 亚洲久久视频| 亚洲专区欧美专区| 亚洲v在线看| 色黄视频在线观看| 欧美国产日韩电影| 日韩精品一级| 在线精品亚洲| 免费在线观看日韩欧美| 亚洲天堂久久| 久久国产日韩| 亚洲国产专区校园欧美| 久久久久久美女精品| 亚洲永久av|