So sánh 2 ArrayList trong Java

CHỈNH SỬA

Đây là hai phiên bản. Một người sử dụng ArrayList và người khác sử dụng HashSet

So sánh chúng và tạo phiên bản của riêng bạn từ đây, cho đến khi bạn nhận được những gì bạn cần.

Điều này là đủ để bao gồm:

P.S: Đây không phải là bài tập của trường :] Vì vậy, nếu bạn chỉ dẫn cho tôi thì sẽ đủ

một phần câu hỏi của bạn.

tiếp tục với câu trả lời ban đầu:

Bạn có thể sử dụng Java.util.Collection và/hoặc Java.util.ArrayList cho điều đó.

Phương thức keep ALL thực hiện như sau:

Chỉ giữ lại các thành phần trong bộ sưu tập này có trong bộ sưu tập đã chỉ định

xem mẫu này:import Java.util.Collection; import Java.util.ArrayList; import Java.util.Arrays; public class Repeated { public static void main[ String  [] args ] { Collection listOne = new ArrayList[Arrays.asList["milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"]]; Collection listTwo = new ArrayList[Arrays.asList["hafil", "iga", "binga", "mike", "dingo"]]; listOne.retainAll[ listTwo ]; System.out.println[ listOne ]; } }

CHỈNH SỬA

Đối với phần thứ hai [các giá trị tương tự], bạn có thể sử dụng phương thức remove ALL :

Xóa tất cả các thành phần của bộ sưu tập này cũng có trong bộ sưu tập đã chỉ định.

Phiên bản thứ hai này cũng cung cấp cho bạn các giá trị tương tự và xử lý lặp đi lặp lại [bằng cách loại bỏ chúng].

Lần này, Collection có thể là Set thay vì List [sự khác biệt là, Bộ không cho phép các giá trị lặp lại]import Java.util.Collection; import Java.util.HashSet; import Java.util.Arrays; class Repeated { public static void main[ String  [] args ] { Collection listOne = Arrays.asList["milan","iga", "dingo","iga", "elpha","iga", "hafil","iga", "meat","iga", "neeta.peeta","iga"]; Collection listTwo = Arrays.asList["hafil", "iga", "binga", "mike", "dingo","dingo","dingo"]; Collection similar = new HashSet[ listOne ]; Collection different = new HashSet[]; different.addAll[ listOne ]; different.addAll[ listTwo ]; similar.retainAll[ listTwo ]; different.removeAll[ similar ]; System.out.printf["One:%s%nTwo:%s%nSimilar:%s%nDifferent:%s%n", listOne, listTwo, similar, different]; } }

Đầu ra:$ Java Repeated One:[milan, iga, dingo, iga, elpha, iga, hafil, iga, meat, iga, neeta.peeta, iga] Two:[hafil, iga, binga, mike, dingo, dingo, dingo] Similar:[dingo, iga, hafil] Different:[mike, binga, milan, meat, elpha, neeta.peeta]

Nếu nó không làm chính xác những gì bạn cần, nó sẽ cho bạn một khởi đầu tốt để bạn có thể xử lý từ đây.

Câu hỏi cho người đọc: Làm thế nào bạn sẽ bao gồm tất cả các giá trị lặp lại?

Bạn có thể thử intersection[] và subtract[] phương thức từ CollectionUtilsNAME _ .

Phương thức intersection[] cung cấp cho bạn một bộ sưu tập có chứa các phần tử phổ biến và phương thức subtract[] cung cấp cho bạn tất cả các phần tử không phổ biến.

Họ cũng nên quan tâm đến các yếu tố tương tự

Đây có thực sự là danh sách [được sắp xếp, với các bản sao] hay chúng bộ [không có thứ tự, không có bản sao]?

Bởi vì nếu đó là cái sau, thì bạn có thể sử dụng, giả sử Java.util.HashSet và thực hiện việc này trong thời gian tuyến tính dự kiến ​​bằng cách sử dụng thuận tiện retainAllNAME _ .    List list1 = Arrays.asList[ "milan", "milan", "iga", "dingo", "milan" ]; List list2 = Arrays.asList[ "hafil", "milan", "dingo", "meat" ]; // intersection as set Set intersect = new HashSet[list1]; intersect.retainAll[list2]; System.out.println[intersect.size[]]; // prints "2" System.out.println[intersect]; // prints "[milan, dingo]" // intersection/union as list List intersectList = new ArrayList[]; intersectList.addAll[list1]; intersectList.addAll[list2]; intersectList.retainAll[intersect]; System.out.println[intersectList]; // prints "[milan, milan, dingo, milan, milan, dingo]" // original lists are structurally unmodified System.out.println[list1]; // prints "[milan, milan, iga, dingo, milan]" System.out.println[list2]; // prints "[hafil, milan, dingo, meat]"

Sử dụng Java 8 remove Ifpublic int getSimilarItems[]{ List one = Arrays.asList["milan", "dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"]; List two = new ArrayList[Arrays.asList["hafil", "iga", "binga", "mike", "dingo"]]; //Cannot remove directly from array backed collection int initial = two.size[]; two.removeIf[one::contains]; return initial - two.size[]; }

Nếu bạn đang tìm kiếm một cách thuận tiện để kiểm tra sự bằng nhau của hai bộ sưu tập, bạn có thể sử dụng org.Apache.commons.collections.CollectionUtils.isEqualCollection, so sánh hai bộ sưu tập bất kể thứ tự.

Tôi đã tìm thấy một ví dụ rất cơ bản về So sánh danh sách tại So sánh danh sách Ví dụ này xác minh kích thước trước rồi kiểm tra tính khả dụng của thành phần cụ thể của một danh sách trong danh sách khác.

Giả sử hash2 và hash2List< String > sames = whatever List< String > diffs = whatever int count = 0; for[ String key : hash2.keySet[] ] { if[ hash2.containsKey[ key ] ] { sames.add[ key ]; } else { diffs.add[ key ]; } } //sames.size[] contains the number of similar elements.

Giải pháp đơn giản: -    List list = new ArrayList[Arrays.asList["a", "b", "d", "c"]]; List list2 = new ArrayList[Arrays.asList["b", "f", "c"]]; list.retainAll[list2]; list2.removeAll[list]; System.out.println["similiar " + list]; System.out.println["different " + list2];

Đầu ra: -similiar [b, c] different [f]

Trong tất cả các cách tiếp cận, tôi thấy sử dụng org.Apache.commons.collections.CollectionUtils#isEqualCollection là cách tiếp cận tốt nhất. Dưới đây là những lý do -

  • Tôi không phải khai báo bất kỳ danh sách bổ sung/tự đặt
  • Tôi không làm thay đổi danh sách đầu vào
  • Nó rất hiệu quả. Nó kiểm tra sự bằng nhau trong độ phức tạp O[N].

Nếu không thể có Apache.commons.collections làm phụ thuộc, tôi khuyên bạn nên thực hiện thuật toán theo sau để kiểm tra tính công bằng của danh sách vì tính hiệu quả của nó.

Video liên quan

Chủ Đề