2013-03-22 33 views
7

Làm cách nào chúng ta có thể loại bỏ các giá trị chung khỏi hai ArrayList. cho phép xem xét tôi có hai ArrayList như hình dưới đâyCách xóa các giá trị chung khỏi hai danh sách mảng

ArrayList1= [1,2,3,4] 
ArrayList1= [2,3,4,6,7] 

Tôi muốn có kết quả như

ArrayListFinal= [1,6,7] 

bất cứ ai có thể vui lòng giúp tôi ra?

+5

Hãy thử, sau đó chúng tôi sẽ giúp bạn. –

+0

để bạn muốn xóa các phần tử phổ biến – SRy

+2

Gợi ý: Nếu bạn đọc api cho Danh sách, bạn sẽ tự khắc phục sự cố của mình. – Sanchit

Trả lời

28

Dưới đây là một thuật toán mà bạn có thể làm theo để hoàn thành nhiệm vụ:

  • Xây dựng một liên minh của hai mảng
  • Xây dựng giao điểm của hai mảng
  • Trừ ngã từ sự kết hợp để nhận kết quả của bạn

Bộ sưu tập Java hỗ trợ addAll, removeAllretainAll. Sử dụng addAll để xây dựng công đoàn, retainAll cho nút giao thông xây dựng, và removeAll cho phép trừ, like this:

// Make the two lists 
List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
List<Integer> list2 = Arrays.asList(2, 3, 4, 6, 7); 
// Prepare a union 
List<Integer> union = new ArrayList<Integer>(list1); 
union.addAll(list2); 
// Prepare an intersection 
List<Integer> intersection = new ArrayList<Integer>(list1); 
intersection.retainAll(list2); 
// Subtract the intersection from the union 
union.removeAll(intersection); 
// Print the result 
for (Integer n : union) { 
    System.out.println(n); 
} 
+0

Cảm ơn bạn đã trả lời ... đó là những gì tôi đang tìm kiếm :) :) – Gautam

+0

lưu ý: bạn cần phải @override equals() để làm việc này. – Gewure

0
SetList<Integer> A = new SetList<Integer>(); 
A.addAll({1,2,3,4}); 

SetList<Integer> B = new SetList<Integer>(); 
B.addAll({2,3,4,6,7}); 

Integer a = null; 

for (int i=0; i<A.size(); i++) 
{ 
    a = A.get(i); 

    if (B.contains(a) 
    { 
     B.remove(a); 
     A.remove(a); 
     i--; 
    } 
} 

SetList<Integer> final = new SetList<Integer>(); 
final.addAll(A); 
final.addAll(B); 

// final = { 1, 6, 7 } 
13

Bạn đang thực sự yêu cầu cho Symmetric Difference.

List<Integer> aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4)); 
List<Integer> bList = new ArrayList<>(Arrays.asList(2, 3, 4, 6, 7)); 
// Union is all from both lists. 
List<Integer> union = new ArrayList(aList); 
union.addAll(bList); 
// Intersection is only those in both. 
List<Integer> intersection = new ArrayList(aList); 
intersection.retainAll(bList); 
// Symmetric difference is all except those in both.  
List<Integer> symmetricDifference = new ArrayList(union); 
symmetricDifference.removeAll(intersection); 

System.out.println("aList: " + aList); 
System.out.println("bList: " + bList); 
System.out.println("union: " + union); 
System.out.println("intersection: " + intersection); 
System.out.println("**symmetricDifference: " + symmetricDifference+"**"); 

Prints:

aList: [1, 2, 3, 4] 
bList: [2, 3, 4, 6, 7] 
union: [1, 2, 3, 4, 2, 3, 4, 6, 7] 
intersection: [2, 3, 4] 
**symmetricDifference: [1, 6, 7]** 
+0

Cảm ơn bạn đã trả lời ... đó là những gì tôi đang tìm kiếm :) :) – Gautam

+0

@OldCurmudgeon Tôi phải làm gì nếu tôi muốn một kết quả như [1, 2, 3, 4,6,7] ?? –

+1

@ KK_07k11A0585 - Đó là 'union' của' chênh lệch đối xứng' và 'giao lộ'. – OldCurmudgeon

3

Bạn có thể sử dụng một cái gì đó như thế này:

ArrayList <Integer> first = new ArrayList <Integer>(); 
    ArrayList <Integer> second = new ArrayList <Integer>(); 
    ArrayList <Integer> finalResult = new ArrayList <Integer>(); 

    first.add(1); 
    first.add(2); 
    first.add(3); 
    first.add(4); 

    second.add(2); 
    second.add(3); 
    second.add(4); 
    second.add(6); 
    second.add(7); 

    for (int i = 0; i < first.size(); i++){ 

     if (!second.contains(first.get(i))){ 

      finalResult.add(first.get(i)); 
     } 
    } 


    for (int j = 0; j < second.size(); j++){ 

     if (!first.contains(second.get(j))){ 

      finalResult.add(second.get(j)); 
     } 

    } 

Tôi chỉ dân cư hai ArrayLists như bạn mô tả chúng trong bài viết của bạn, và tôi đã kiểm tra trên cả hai trong số họ cho các yếu tố riêng biệt; nếu các phần tử/s đã được tìm thấy, tôi thêm chúng vào finalResult ArrayList.

Tôi hy vọng nó sẽ giúp bạn :)

Các vấn đề liên quan