Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

So Sánh Hai List Trong Java: Tìm Phần Tử Chung Và Thiếu

Interface List trong Java cung cấp phương thức để so sánh hai List và tìm các mục chung (common) và thiếu (missing) từ các list.

So Sánh Hai Unsorted List Cho Bằng Nhau (Equality)

Nếu bạn muốn kiểm tra hai list bằng nhau, tức là chứa cùng các mục và xuất hiện ở cùng index thì dùng:

import java.util.Arrays;
import java.util.List;

public class CompareTwoLists {
    public static void main(String[] args) {
        List listOne = Arrays.asList("a", "b", "c");
        List listTwo = Arrays.asList("a", "b", "c");
        List listThree = Arrays.asList("c", "a", "b");
        boolean isEqual = listOne.equals(listTwo);
        System.out.println(isEqual);
        isEqual = listOne.equals(listThree);
        System.out.println(isEqual);
    }
}

Đầu ra:

true
false

Như bạn thấy, phương thức equals() so sánh cả mục và vị trí của chúng trong list.

  • Cách duyệt ArrayList trong Java
  • Cách xóa duplicate từ list
  • Cách chuyển list thành array trong Java

So Sánh Hai Sorted List

Hai list có chứa cùng các mục không?

Để so sánh hai list cho equality chỉ về mặt mục bất kể vị trí, chúng ta cần dùng phương thức sort() từ class Collections.

Ví dụ:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CompareTwoLists {
    public static void main(String[] args) {
        List listOne = Arrays.asList("b", "c", "a");
        List listTwo = Arrays.asList("a", "c", "b");
        List listThree = Arrays.asList("c", "a", "b");
        Collections.sort(listOne);
        Collections.sort(listTwo);
        Collections.sort(listThree);
        boolean isEqual = listOne.equals(listTwo);
        System.out.println(isEqual);
        isEqual = listOne.equals(listThree);
        System.out.println(isEqual);
    }
}

Đầu ra:

true
true

So Sánh Hai List, Tìm Khác Biệt

Interface List cũng cung cấp phương thức tìm khác biệt giữa hai list.

Phương thức removeAll() so sánh hai list và xóa tất cả các mục chung. Còn lại là các mục thêm hoặc thiếu.

Ví dụ khi so sánh hai list, listOne và listTwo và muốn tìm mục thiếu từ listTwo ta dùng:

import java.util.ArrayList;
import java.util.Arrays;

public class CompareTwoArrayLists {
    public static void main(String[] args) {
        ArrayList listOne = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        ArrayList listTwo = new ArrayList<>(Arrays.asList(1, 2, 4, 5, 6, 7));
        listOne.removeAll(listTwo);
        System.out.println("Missing items from listTwo " + listOne);
    }
}

Đầu ra:

Missing items from listTwo [3]

Tương tự, nếu dùng:

listTwo.removeAll(listOne);
System.out.println("Missing items from listOne " + listTwo);

Chúng ta nhận:

Missing items from listOne [6, 7]

So Sánh Hai List, Tìm Phần Tử Chung

Phương thức retainAll() chỉ giữ các mục chung trong cả hai list. Ví dụ:

import java.util.ArrayList;
import java.util.Arrays;

public class CompareTwoArrayLists {
    public static void main(String[] args) {
        ArrayList listOne = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        ArrayList listTwo = new ArrayList<>(Arrays.asList(1, 2, 4, 5, 6, 7));
        listOne.retainAll(listTwo);
        System.out.println("Common items in both lists " + listOne);
    }
}

Đầu ra:

Common items in both lists [1, 2, 4, 5]