/**
* 比較兩個List集合是否相等
* <p>注:1. 如果一個List的引用為<code>null</code>,或者其包含的元素個數為0,那么該List在本邏輯處理中都算作空;
* <p>2. 泛型參數E涉及到對象,所以需要確保正確實現了對應對象的<code>equal()</code>方法。
* @param list1
* @param list2
* @return
*/
public static <E>boolean isListEqual(List<E> list1, List<E> list2) {
// 兩個list引用相同(包括兩者都為空指針的情況)
if (list1 == list2) {
return true;
}
// 兩個list都為空(包括空指針、元素個數為0)
if ((list1 == null && list2 != null && list2.size() == 0)
|| (list2 == null && list1 != null && list1.size() == 0)) {
return true;
}
// 兩個list元素個數不相同
if (list1.size() != list2.size()) {
return false;
}
// 兩個list元素個數已經相同,再比較兩者內容
// 采用這種可以忽略list中的元素的順序
// 涉及到對象的比較是否相同時,確保實現了equals()方法
if (!list1.containsAll(list2)) {
return false;
}
return true;
}
參考
參考文章兩個List比較內容是否一樣和Java判斷2個List集合是否相等(不考慮元素的順序)寫的,主要對文章講到的比較算法的具體實現進行了完善改造。