2011-08-24 77 views
5

Tôi có hai ArrayLists:Hãy so sánh hai ArrayList

ArrayList a1 = new ArrayList(); 
a1.add("5"); 
a1.add("10"); 
a1.add("20"); 
a1.add("50"); 
a1.add("100"); 
a1.add("500"); 
a1.add("1000"); 

ArrayList a2 = new ArrayList(); 
a2.add("50"); 
a2.add("500"); 
a2.add("1000"); 

Làm thế nào tôi có thể so sánh này hai ArrayLists và thêm vào ArrayList mới (a3) ​​với 1 nếu a2 tồn tại trong a1 và 0 nếu không tồn tại, vì vậy kết quả sẽ dưới đây cho mảng a3?

a3[0] = 0 
a3[1] = 0 
a3[2] = 0 
a3[3] = 1 
a3[4] = 0 
a3[5] = 1 
a3[6] = 1 

Cảm ơn trước

Trả lời

11

Trước tiên, tôi sẽ khuyên bạn use generics. Và thứ hai, thay vào đó, đối với a2 có thể là Set. Và thứ ba, bạn có thể muốn thay đổi từ String thành Integer (vì chúng là tất cả các số nguyên).

Nhưng ví dụ của bạn đây là một cách để làm điều đó:

ArrayList<Integer> a3 = new ArrayList<Integer>();    
for (String a : a1) 
    a3.add(a2.contains(a) ? 1 : 0); 

Full dụ (với một loại HashSetInteger):

public static void main(String... args) { 
    List<Integer> a1 = Arrays.asList(5, 10, 20, 50, 100, 500, 1000); 
    Set<Integer> a2 = new HashSet<Integer>(Arrays.asList(50, 500, 1000)); 

    ArrayList<Integer> a3 = new ArrayList<Integer>();     

    for (Integer a : a1) 
     a3.add(a2.contains(a) ? 1 : 0); 

    System.out.println(a3); 
} 

Output:

[0, 0, 0, 1, 0, 1, 1] 
0

Cá tuyết Psuedo e

Check both a1 and a2 for length. say a1 is longest 
a3 = new arraylist(a1.length) 
for(i=0 to a2.length) 
if(a1.contains(a2.get(i)) 
    a3.get(i)++; 
0

Something như thế này:

ArrayList<Integer> a3 = new ArrayList<Integer>(); 

for (String v : a1) { 
    if (a2.contains(v)) { 
     a3.add(1); 
    } else { 
     a3.add(0); 
    } 
} 
1

này sẽ làm điều đó. Lưu ý rằng câu hỏi của bạn chỉ định int[] làm loại đầu ra, đó không phải là những gì tôi đã chọn - Danh sách có lẽ sẽ tốt hơn, tuy nhiên câu trả lời này làm những gì bạn yêu cầu, không giống như mọi câu trả lời khác tôi đã thấy cho đến nay.

public static void main(String[] args) { 
    ArrayList<String> a1 = new ArrayList<String>(); 
    a1.add("5"); 
    a1.add("10"); 
    a1.add("20"); 
    a1.add("50"); 
    a1.add("100"); 
    a1.add("500"); 
    a1.add("1000"); 

    ArrayList<String> a2 = new ArrayList<String>(); 
    a2.add("50"); 
    a2.add("500"); 
    a2.add("1000"); 

    int[] matches = new int[a1.size()]; 

    int i = 0; 
    for (String s : a1) 
     matches[i++] = a2.contains(s) ? 1 : 0; 

    System.out.println(Arrays.toString(matches)); 
} 

Output:

[0, 0, 0, 1, 0, 1, 1] 
1

Bạn có thể sử dụng contains(Object o) method of ArrayList để kiểm tra xem phần tử hiện diện trong ArrayList thứ 2 hay không và phù hợp thêm phần tử vào danh sách thứ 3 như:

for(String temp: a1) 
{ 
    if(a2.contains(temp)) 
    { 
     a3.add(1); 
    } 
    else 
    { 
    a3.add(0); 
    } 
}