Сравните два arraylist - PullRequest
       6

Сравните два arraylist

5 голосов
/ 24 августа 2011

У меня есть два Arraylists:

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

Как я могу сравнить эти два arraylists и добавить в новый arraylist (a3) ​​с 1, если a2 существует в a1 и 0, если не существует, поэтому результат будет нижедля архива a3?

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

Заранее спасибо

Ответы [ 5 ]

11 голосов
/ 24 августа 2011

Во-первых, я бы посоветовал вам использовать дженерики .А во-вторых, для a2 вместо этого может быть Set.И в-третьих, вы можете захотеть изменить значение с String на Integer (поскольку все они являются целыми числами).

Но для вашего примера это способ сделать это:

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

Полный пример (с типами HashSet и 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);
}

Выход:

[0, 0, 0, 1, 0, 1, 1]
1 голос
/ 24 августа 2011

Вы можете использовать contains(Object o) method of ArrayList, чтобы проверить, присутствует ли элемент во 2-м массиве или нет, и, соответственно, добавить элемент в 3-й список, например:

for(String temp: a1)
{
   if(a2.contains(temp)) 
   {
      a3.add(1);
   }
   else
   {
     a3.add(0);
   }
}
1 голос
/ 24 августа 2011

Это будет сделано.

Обратите внимание, что ваш вопрос указывает int[] в качестве типа вывода, что не является тем, что я бы выбрал - Список, вероятно, будет лучше, однако этот ответ делает то, что вы просилив отличие от любого другого ответа, который я видел до сих пор.

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

Вывод:

[0, 0, 0, 1, 0, 1, 1]
0 голосов
/ 24 августа 2011

Примерно так:

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

for (String v : a1) {
    if (a2.contains(v)) {
        a3.add(1);
    } else {
        a3.add(0);
    }
}
0 голосов
/ 24 августа 2011

код Psuedo

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)++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...