日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素

發(fā)布時(shí)間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需求:從 mAllList 中去除所有 mSubList 中與之重復(fù)的元素
測(cè)試數(shù)據(jù):mAllList 中包含100000個(gè)無(wú)序無(wú)重復(fù)字符串,mSubList 中包含50000個(gè)無(wú)序無(wú)重復(fù)字符串

方法一、ArrayList中提供的removeAll方法(效率最低)
mAllList.removeAll(mSubList);

某次測(cè)試耗時(shí):185665ms

方法二、雙重循環(huán)(比方法一效率高)

雙重循環(huán)分為內(nèi)外兩層循環(huán),經(jīng)過(guò)測(cè)試,將元素多的list放在外層循環(huán)效率更高(mSubList中的元素可能比mAllList多)(被刪除元素的列表mAllList放在外層循環(huán)和內(nèi)層循環(huán)的實(shí)現(xiàn)方式有些差別),這里的測(cè)試數(shù)據(jù)是mAllList中的元素多,實(shí)現(xiàn)如下:

int maxSize = mAllList.size(); for (int i = maxSize-1; i >=0; i--) {int size = mSubList.size();while (size > 0) {String s = mSubList.get(size-1);if (s.equals(mAllList.get(i))) {mSubList.remove(size-1);mAllList.remove(i);break;}size--;} }

某次測(cè)試耗時(shí):101510ms

方法三、利用HashMap(效率最高)
//第一步:構(gòu)建mAllList的HashMap //將mAllList中的元素作為鍵,如果不是String類,需要實(shí)現(xiàn)hashCode和equals方法 //將mAllList中的元素對(duì)應(yīng)的位置作為值 Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < mAllList.size(); i++) {map.put(mAllList.get(i), i); } //第二步:利用map遍歷mSubList,查找重復(fù)元素 //把mAllList中所有查到的重復(fù)元素的位置置空 for (int i = 0; i < mSubList.size(); i++) {Integer pos = map.get(mSubList.get(i));if (pos==null) {continue;}mAllList.set(pos, null); } //第三步:把mAllList中所有的空元素移除 for (int i = mAllList.size()-1; i>=0; i--) {if (mAllList.get(i)==null) {mAllList.remove(i);} }

某次測(cè)試耗時(shí):712ms

方法三的一些說(shuō)明
  • 方法三中初始化HashMap的時(shí)候已經(jīng)知道了容量大小,理論上直接指定HashMap的大小避免擴(kuò)容可以提高效率,但是測(cè)試發(fā)現(xiàn)并沒(méi)有提高,100000條數(shù)據(jù)都是幾十毫秒
  • 雖然方法三中HashMap存的值是整數(shù),但是不要使用int pos = map.get(mSubList.get(i));取值,會(huì)崩潰
  • 第二步中,使用Integer pos = map.get(mSubList.get(i));取值,然后判斷 pos 是否是空來(lái)判斷map中是否包含鍵是mSubList.get(i)的值,比用map.containsKey(key)來(lái)判斷然后get取值少訪問(wèn)一次哈希表
  • 第三步中,從mAllList尾部開(kāi)始遍歷移除
  • HashMap不了解的可以看下Java HashMap原理解析

    轉(zhuǎn)載于:https://www.cnblogs.com/developerzjy/p/11084182.html

    總結(jié)

    以上是生活随笔為你收集整理的Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: av色图片 | 色婷婷激情综合 | 偷拍亚洲色图 | www.日日干 | 少妇人妻好深好紧精品无码 | 黄色网占| 精品在线观看视频 | 国产7777777| 日本视频网站在线观看 | 日本中文字幕不卡 | 成人在线观看你懂的 | 中文字幕一区二区三区精华液 | 久久爱伊人| 国偷自拍 | 日出白浆视频 | 美女干b视频 | 黑人欧美一区二区三区 | 日日夜夜综合 | 日韩欧美国产中文字幕 | 自拍超碰| 日韩黄色免费 | 五月激情在线观看 | 黄色精品视频 | 日本少妇激情 | 日韩avv| 成人在线观看一区二区 | 少妇做爰xxxⅹ性视频 | 久久成人人人人精品欧 | 黄色av免费在线观看 | 欧洲成人在线视频 | 欧美www在线观看 | 欧美性俱乐部 | 亚洲一区二区三区四区五区六区 | 一级黄色片国产 | 亚洲欧美日韩一区二区三区四区 | 欧美日一本 | 国产午夜电影在线观看 | 三级男人添奶爽爽爽视频 | 日韩欧美有码 | 色欲亚洲Av无码精品天堂 | 欧美黑人猛交 | 特级精品毛片免费观看 | 亚洲精品一二区 | 香蕉久久精品 | 中文字幕啪啪 | 性欧美欧美巨大69 | 在线看片日韩 | 成人无码久久久久毛片 | 久久久全国免费视频 | 深夜福利视频网站 | 午夜伦理影院 | 日韩高清在线一区二区 | 久久中文视频 | 亚洲色图网址 | 国产成人精品999在线观看 | 日韩精品国产AV | 亚洲精品一区二区三区不卡 | 国产手机在线观看 | 日韩中文字幕免费在线观看 | 国产伦精品一区二区三区四区免费 | 超碰蜜臀 | 91丝袜美腿| 91九色丨porny丨肉丝 | 中国毛片网站 | 精品999久久久 | 日韩一区二区三区高清 | 老熟妇高潮一区二区高清视频 | 黄色一级二级 | 中文字幕少妇在线三级hd | 无遮挡又爽又刺激的视频 | 欧美韩日一区二区 | 9·1·黄·色·视·频 | 新亚洲天堂 | 污黄视频网站 | 成人日批| 国产精品乱码一区二区 | 亚洲国产精品一区二区尤物区 | 在线视频日韩精品 | 免费久久av | 91国内精品久久久 | 欧美在线xxx| 日韩精品中文字幕在线 | 免费a网 | www.sesehu| 插插插插综合 | 一起草最新网址 | 国产精品爽爽 | 欧美精品videos| 成人国产精品蜜柚视频 | 91在线色 | 一对一色视频聊天a | 精品视频免费看 | 18av在线播放| 绿帽单男 | 久久七| 超碰免费看| 18被视频免费观看视频 | 国产福利在线视频 | 亚洲国产精品久久人人爱 |