工作需求,需要做檔案對賬功能。
簡單點講,就是兩個集合,找出這兩個集合中不同的元素。
演算法我就不自己寫了。可以用set解決這個問題。
hashset不能新增重複的元素,當呼叫add(object)方法時候, 首先會呼叫object的hashcode方法判hashcode是否已經存在,如不存在則直接插入元素; 如果已存在則呼叫object物件的equals方法判斷是否返回true, 如果為true則說明元素已經存在,如為false則插入元素。
所以我們要先重寫物件的hashcode()方法和equals()方法。
**如下:
@override
public int hashcode()
@override
public boolean equals(object o)else
}else
}
重寫了hashcode()方法和equals()方法後,就可以用set來找不同了。
**如下:
public setreconciliation(listourdocuments, listotherfile)
return or;
}
為此我準備了兩個一樣的檔案,然後從其中乙個檔案找出三條資料,分別修改amount,status,orderno狀態。
執行之後
問題出現了。
少了一條資料。我修改了轉殖檔案中的三條資料,應該最後返回的集合有六條資料才對。而且集合and做了求交集的動作,應該是211條資料而不是212條資料才對。
辛苦除錯之後,發現在呼叫retainall方法的時候,並沒有呼叫hashcode()方法。而且對於object.hashcode()有如下約定
(⊙v⊙)嗯!解決如下:
@override
public boolean equals(object o)else
}else
}
執行結果如下:
51nod 1557 兩個集合(Set)
題意 給你a和b,小x有n個互不相同的整數 p1,p2,pn 他想把這些整數分到兩個集合a和b裡邊。但是要符合下面兩個條件。如果x屬於a,那麼a x也肯定屬於a。如果x屬於b,那麼b x也肯定屬於b。思路 如果a x,b x都不存在那麼就是a,b都不能放,no。如果a x,b x只存在其中乙個,那就...
C 獲取兩個集合中相同的和不同的結果
有乙個需求,伺服器根據客戶端傳過來的乙個陣列,找到資料庫中不包含該陣列資料的所有資料。本來是想用兩個for迴圈比較的,然後覺得太臃腫,於是去萬能的google看了下,果然,有更簡潔的寫法。遂記錄之。static void main string args int b ienumerable en a...
17082 兩個有序數序列中找第k小(優先做)
已知兩個已經排好序 非減序 的序列x和y,其中x的長度為m,y長度為n,現在請你用分治演算法,找出x和y的第k小的數,演算法時間複雜度為o max 此題請勿採用將序列x和y合併找第k小的o m n 的一般方法,要充分利用x和y已經排好序的這一特性。第一行有三個數,分別是長度m 長度n和k,中間空格相...