簡體   English   中英

如何返回Java原始列表中缺少的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM