java怎么判斷兩個(gè)集合之間是否有交集

發(fā)布時(shí)間:2024-02-13
背景:
前端傳了list集合,后端字段里存的也是(1,2,3,4)這種形式。不借助sql,怎么看前端傳的集合是否在后端字段的集合中?
(學(xué)習(xí)視頻分享:java教學(xué)視頻)
代碼:
public static boolean judgeintersection(list<string> list1,list<string> list2){ boolean flag = false; // 使用retainall會(huì)改變list1的值,所以寫(xiě)一個(gè)替代 list<string> origin = new arraylist<>(); origin.addall(list1); origin.retainall(list2); // 有交集 if(origin.size()>0){ flag = true; } return flag;}boolean flag = origin.retainall(collection<?> c)
若origin中有集合c中沒(méi)有的數(shù)據(jù),返回false。沒(méi)有返回true
同時(shí),origin集合會(huì)改變,只保留兩個(gè)集合相同的數(shù)據(jù),換句話(huà)說(shuō),origin集合有被刪除的數(shù)據(jù),返回false
那如何判斷是否有交集?
1、兩個(gè)集合,一個(gè)一樣的都沒(méi)有,origin為空,返回值是false
2、兩個(gè)集合,碰巧,origin中的數(shù)據(jù)都在c中,origin不變,返回值是true
這兩種特殊情況都是導(dǎo)致單純靠返回值true or false,是不能判斷有交集的。所以根據(jù)要origin集合中的個(gè)數(shù),>0,就是有交集
retainall(collection<?> c)源碼
public boolean retainall(collection<?> c) { // 判斷c集合是否為空 objects.requirenonnull(c); return batchremove(c, true); } private boolean batchremove(collection<?> c, boolean complement) { // 得到調(diào)用該函數(shù)的集合。因?yàn)槭且妙?lèi)型,所以修改了都會(huì)有變化 final object[] elementdata = this.elementdata; // w:記錄交集的數(shù)據(jù)都放到elementdata前面,w是其位置分界線(xiàn) int r = 0, w = 0; // 返回值 用于判斷elementdata有沒(méi)有被修改 boolean modified = false; try { // 循環(huán)elementdata集合,判斷其中元素是否在c集合中 for (; r < size; r ) // 若在集合中,則w自增,并將該值放到elementdata[w]中,即是交集的數(shù)據(jù)都放到集合的前面 if (c.contains(elementdata[r]) == complement) elementdata[w ] = elementdata[r]; } finally { // preserve behavioral compatibility with abstractcollection, // even if c.contains() throws. // 正常情況下,經(jīng)過(guò)上面的循環(huán),r==size。為防止出現(xiàn)循環(huán)異常,將由于異常導(dǎo)致的r到size是交集的數(shù)據(jù)但并沒(méi)有放到對(duì)應(yīng)w的位置的數(shù)據(jù),都放到對(duì)應(yīng)w之后的位置上 if (r != size) { system.arraycopy(elementdata, r, elementdata, w, size - r); w = size - r; } // 若elementdata中有數(shù)據(jù)不在c集合中,就清理掉w位置之后的數(shù)據(jù),便于垃圾回收 if (w != size) { // clear to let gc do its work for (int i = w; i < size; i ) elementdata[i] = null; // 記錄elementdata集合被增刪的次數(shù),這里是刪除 modcount = size - w; // 賦值最新的size size = w; // elementdata集合被清理,modified為true modified = true; } } return modified; }相關(guān)推薦:java入門(mén)教程
上一個(gè):武漢秋季景點(diǎn)推薦
下一個(gè):RC-01U915JTE,J 0201 9.1M現(xiàn)貨購(gòu)買(mǎi),風(fēng)華0201 9.1MΩ ±5% 1/20W

miui11自定義息屏顯示圖片(小米11息屏顯示是什么)
為什么ametc公司的流量計(jì)市場(chǎng)占有率越來(lái)越高?
如何養(yǎng)好散尾葵
德國(guó)品牌furnas電器(您最值得信賴(lài)的工控自動(dòng)化選擇)
RS-03K2613FT在線(xiàn)查庫(kù)存,今日?qǐng)?bào)價(jià)
去維修店裝固態(tài)硬盤(pán)多少錢(qián),去電腦店裝固態(tài)硬盤(pán)要多少錢(qián)
注意一下,冬季裝修施工問(wèn)題
中科院固態(tài)電池合肥生產(chǎn)線(xiàn),科研出來(lái)動(dòng)物不在我的包裹里
接地線(xiàn)成組直流電阻測(cè)試儀|成組直流電阻測(cè)試儀
寒蘭養(yǎng)殖方法
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos