[英]How can I return a value that is missing from an original list in java?
如果我有兩個數組,第一個數組包含原始值,第二個數組包含更改后的值。
如何查看更改后的列表中是否缺少任何值?
例如:
Array one: 1, 2, 3, 4, 5, 6, 7, 8, 9
Array two: 1, 3, 4, 5, 6, 7, 8, 9
顯然在數組2中,數字2丟失了。 我如何在不檢查數組大小的情況下獲得此缺失值,因為這無關緊要。
另一個示例可能是:
Array one: 1,2,3,4,5
Array two: 1,2,3,4,4,4,4,4,4,4,4,4
仍然不包含“ 5”。
您可以使用功能List#removeAll()
:
first.removeAll(second);
現在,列表僅包含第二個列表中未包含的內容。 請注意,如果計划使用第一個列表,則在刪除項目之前必須先對其進行克隆。
如果您以提高效率為目標,我建議您先對列表進行排序(如果事先未對它們進行排序),然后刪除一個數字的所有重復項,並超過兩個列表中的第一個。 這樣,列表中的每個元素最多只能出現一次。
然后,您同時遍歷兩個列表,比較它們的元素。 如果兩個元素都匹配,則從兩個列表中刪除兩個值。 如果不是,則在兩個較小元素的列表中前進。 在一個列表中的元素用完之后,兩個列表只剩下唯一的元素,而另一個列表中沒有。
public void compareLists(ArrayList<Integer> list1, ArrayList<Integer> list2) {
int i = 0;
int j = 0;
while (i < list1.size() && j < list2.size()) {
if (list1.get(i) == list2.get(j)) {
list1.remove(i);
list2.remove(j);
} else if (list1.get(i) < list2.get(j)) {
i++;
}
else {
j++;
}
}
System.out.println("Unique elements in first list: ");
for (Integer num : list1) {
System.out.print(num + " ");
}
System.out.println("Unique elements in second list: ");
for (Integer num : list2) {
System.out.print(num + " ");
}
}
這段代碼顯示了最終的比較,排序和除去非唯一性的前兩個步驟很簡單。
盡管removeAll似乎是可行的方法,但這是另一個選擇:
我應該提一下,這僅在數組按順序排序時有效。
從每個數組的開頭開始。 如果值匹配,則轉到兩者中的下一個索引。 如果它們不匹配,則將較低的值報告為在另一個數組中丟失,然后僅增加較低值的數組的索引。 再次比較。 如果到達一個數組的末尾,但不能同時到達兩個數組的末尾,則結束的數組中將遺漏任何剩余的東西。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.