2011-08-24 15 views
5

Tengo dos ArrayLists:comparar dos 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"); 

¿Cómo puedo comparar estos dos ArrayLists y añadir a new ArrayList (a3) ​​con 1 si a2 existe en a1 y 0 si no existe, por lo que el resultado será a continuación para el arraylist a3?

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

Gracias de antemano

Respuesta

11

En primer lugar, habría que aconsejar a use generics. Y en segundo lugar, para a2 podría ser un Set en su lugar. Y en tercer lugar, es posible que desee cambiar de String a Integer (ya que todos son enteros).

Pero por su ejemplo esta es una manera de hacerlo:

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

Ejemplo completo (con un tipo HashSet y Integer):

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); 
} 

Salida:

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

Psuedo cod 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

Algo como esto:

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

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

Esto lo hará.

Tenga en cuenta que su pregunta especifica int[] como el tipo de salida, que no es lo que habría elegido - Lista probablemente sería mejor, sin embargo esta respuesta hace lo que usted pidió, a diferencia de cualquier otra respuesta que he visto hasta ahora.

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)); 
} 

Salida:

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

Puede utilizar contains(Object o) method of ArrayList para comprobar si el elemento está presente en 2ª ArrayList o no y, en consecuencia agregar el elemento a tercera lista como:

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