一段進行對兩個list進行比較的**。
/**
* 首先進行入參檢查防止出現空指標異常
* 如果兩個引數都為空,則返回true
* 如果有一項為空,則返回false
* 接著對第乙個list進行遍歷,如果某一項第二個list裡面沒有,則返回false
* 還要再將兩個list反過來比較,因為可能乙個list是兩乙個list的子集
* 如果成功遍歷結束,返回true
*@param l0
*@param l1
*@return
*/public
static
boolean
islistequal(list l0, list l1)
for (object o : l1)
return
true;
}
這種比較可以成功比較兩個內容相同但是元素順序不同的list。
比較關鍵的是使用了list.contains()方法,這個方法是個介面。以arraylist為例,看一下arraylist裡的實現:
* returns true
if this list
contains
the specified element.
* more formally, returns true
ifand only if this list
contains
* at least one element e such that
* (o==null ? e==null : o.equals(e)).
** @param o element whose presence in this list
isto be tested
* @return
true
if this list
contains
the specified element
*/public boolean
contains(object o)
/*** returns the index of
thefirst occurrence of
the specified element
* in this list, or -1
if this list
does not contain
the element.
* more formally, returns the lowest index i such that
* (o==null ? get(i)==null : o.equals(get(i))),
* or -1
if there is no such index.
*/public int indexof(object o) else
return -1;
}contains()返回的是indexof(object o)是否大於0的boolean值。indexof(object o)返回的結果是目標物件的下標值。
elementdata是arraylist裡的object的陣列,elementdata的宣告(為什麼將型別定為transient 不太明白):
// non-private to simplify nested class access
transient object elementdata;
首先看indexof()方法,當目標object為空時,返回elementdata中第乙個為空元素的下標。否則如果目標object不為空,呼叫object的equals()方法,返回第乙個相等元素的下標。
當上述兩種情況都能找到相應元素時,下標肯定都是大於等於0的,如果沒找到的話返回-1。
因此當contains()只需判斷indexof()的返回值是否大於等於0就可以判斷該list是否包含目標元素。
但是這種簡單的判斷兩個list內容是否一樣的**有乙個問題,因為最終的元素的比較依賴於equals()方法。當list裡的元素沒有重寫equals()方法時,這個判斷的結果是不準確的。
class aa
}arraylist l0 = new arraylist();
l0.add(new aa("aaa"));
l0.add(new aa("bbb"));
arraylist l1 = new arraylist();
l1.add(new aa("aaa"));
l1.add(new aa("bbb"));
system.out.println(islistequal(l0, l1));
上述**應該返回的結果為true,但實際返回的結果為false。
}為aa類重寫equals()後再次執行返回結果正常。
1.凡涉及到物件的比較是否相同時,確保實現了equals()方法,以免發生意外。
2.該判斷方法的**只針對包含了實現了equals的物件的list。
arraylist裡的elementdata欄位為什麼要加transient 關鍵字
交換兩個長度一樣的陣列的內容
交換兩個陣列的內容,也就是將兩個陣列內的各個元素對應交換,可以將兩個陣列一一遍歷,如果下標相等,則交換,否則不交換,具體 實現如下 include include int main int arr2 int i 0 int j 0 int n 0 int m 0 for i 0 i sizeof a...
python比較兩個list
自己寫的,耗時很長。當兩個list是100000級別長度的資料時,需要好幾分鐘 if jpg not in list2 paython自帶方法。速度很快 list3 list set3 初始化資料 lista zhangsan lisi wangwu listb zhangsan lisi zhao...
兩個list比較相等
public static void main string args 使用 org.apache.commons.collections4 listutils.isequallist list1,list2 注意 使用listutils.isequallist 方法是區分順序的,順序不一樣也不相等...