java比較兩個(gè)list是否相同equals的代碼詳解
比較兩個(gè)list是否相同,一般我用數(shù)組自帶的函數(shù)equals,如:
public int updateTemplateByVO(ContentTemplateVO contentTemplateVO) throws Exception { int flag = 0; if (null == contentTemplateVO) { return flag; } //比較新編輯的模板參數(shù)是否與原有的參數(shù)相同 //新的參數(shù)數(shù)組 List<String> stringList = getParamListFromTemplateContent(contentTemplateVO); //舊的參數(shù)數(shù)組 List<TContentTemplateParam> tContentTemplateParamList = selectTemplateParamsByTemplateId(contentTemplateVO.getId()); List<String> paramList = new ArrayList<String>(); //將從表里獲取的數(shù)組重新整理成包含相同類型的list數(shù)組 for (TContentTemplateParam contentParam : tContentTemplateParamList) { paramList.add(contentParam.getParamName()); } //比較兩個(gè)list Boolean sameSortFlag = stringList.equals(paramList); String content = contentTemplateVO.getSmsMsgContent(); StringBuilder stringBuilder = new StringBuilder(content); //參數(shù)有修改則重新排序 if (!sameSortFlag) { String newContent = rightSortForContentParam(contentTemplateVO.getSmsMsgContent()); contentTemplateVO.setSmsMsgContent(newContent); } contentTemplateVO.setUpdateTime(DateUtil.getNowAsDate()); TContentTemplate tContentTemplate = ModelCopyUtil.copy(contentTemplateVO, TContentTemplate.class); flag = tContentTemplateMapper.updateByPrimaryKeySelective(tContentTemplate); if (flag == 1 && (!sameSortFlag)) { //先刪除對(duì)應(yīng)模板的參數(shù)配置 deleteContentTemplateParam(contentTemplateVO); //重新配置模板參數(shù) addContentTemplateParam(contentTemplateVO); } return flag; }
內(nèi)容擴(kuò)展:
Java的倆個(gè)list之間比較,判斷是否一致的方法
前文
我看了一篇博客,是關(guān)于判斷倆個(gè)list的??赐曛笪矣X得可能并不是很好。
結(jié)合他的思路,我重新整理了一下代碼。
同時(shí)也看了看String中的equals的實(shí)現(xiàn)。
import java.util.List; public class ListUtil { /** * 使用時(shí),務(wù)必保證每個(gè)對(duì)象中實(shí)現(xiàn)了equals()方法。 * 如果是自己寫的類,比如,Dog,Cat這些的,請(qǐng)重寫Object中的equals方法! * * @param aList 左右順序無所謂 * @param bList 左右順序無所謂 * @return 盡可能避免相同的情況 */ public static boolean equals(List aList, List bList) { if (aList == bList) return true; if (aList.size() != bList.size()) return false; int n = aList.size(); int i = 0; while (n-- != 0) { if (!aList.get(i).equals(bList.get(i))) return false; i++; } return true; } }
代碼過程
首先判斷倆個(gè)對(duì)象是否相同,如果相同,直接返回true。
接著判斷倆個(gè)的長度是否相同,相同才有比較的意義。
依照size,對(duì)list進(jìn)行遍歷。這里是需要用到equals方法,所以在對(duì)自己寫的一些實(shí)體類判斷的時(shí)候,一定要記得實(shí)現(xiàn)覆寫hashCode()和equals()方法!同時(shí)切記equals方法的傳入?yún)?shù)為Object!否則會(huì)因?yàn)橹剌d的原因,不調(diào)用你寫的方法。
最后,這個(gè)代碼算法復(fù)雜度為n。
以上就是本次介紹的全部相關(guān)知識(shí)點(diǎn),感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
相關(guān)文章
Java基于FFmpeg實(shí)現(xiàn)Mp4視頻轉(zhuǎn)GIF
FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。本文主要介紹了在Java中如何基于FFmpeg進(jìn)行Mp4視頻到Gif動(dòng)圖的轉(zhuǎn)換,感興趣的小伙伴可以了解一下2022-11-11java返回集合為null還是空集合及空集合的三種寫法小結(jié)
這篇文章主要介紹了java返回集合為null還是空集合及空集合的三種寫法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java實(shí)現(xiàn)五子棋網(wǎng)絡(luò)版
這篇文章主要為大家詳細(xì)介紹了基于Java編寫的網(wǎng)絡(luò)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
這篇文章主要介紹了Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java中的ReentrantReadWriteLock實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java中的ReentrantReadWriteLock實(shí)現(xiàn)原理詳解,讀寫鎖實(shí)現(xiàn)了接口ReadWriteLock,適合于讀多寫少的情況,支持公平鎖和非公平鎖,支持可沖入(進(jìn)入讀鎖后可再進(jìn)入讀鎖,進(jìn)入寫鎖后可再進(jìn)入寫鎖和讀鎖),需要的朋友可以參考下2024-01-01