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-11
java返回集合為null還是空集合及空集合的三種寫法小結(jié)
這篇文章主要介紹了java返回集合為null還是空集合及空集合的三種寫法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java實(shí)現(xiàn)五子棋網(wǎng)絡(luò)版
這篇文章主要為大家詳細(xì)介紹了基于Java編寫的網(wǎng)絡(luò)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
這篇文章主要介紹了Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java中的ReentrantReadWriteLock實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java中的ReentrantReadWriteLock實(shí)現(xiàn)原理詳解,讀寫鎖實(shí)現(xiàn)了接口ReadWriteLock,適合于讀多寫少的情況,支持公平鎖和非公平鎖,支持可沖入(進(jìn)入讀鎖后可再進(jìn)入讀鎖,進(jìn)入寫鎖后可再進(jìn)入寫鎖和讀鎖),需要的朋友可以參考下2024-01-01

