4

i got two String type arraylist ..one list containing “book1”, “book2”, “book3” and “book4”. And another arrayList contains “book1”, “book2”, “book3”. So, size of first list is 4 and second is 3. And I created another arrayList equal to the size of first list

List<Integer> comparingList = new ArrayList<Integer>();
                    //adding default values as one
                    for(int a=0;a<firstList.size();a++){
                        comparingList.add(0);

                    }

And if any content is equal between two lists, I’m setting 1 instead of 0.

so the new arrayList(comparingList) should have 1,1,1,0 elements

for(int counter = 0;counter < firstList.size();counter++){
for(int counter1 = 0;counter1 < secondList.size();counter1++){
if(firstList.get(counter).equals(secondList.get(counter1))){
    comparingList.set(counter,1);
    break;
}
}

}

but when i do this, i’m not being able to set 1 as I can’t get into if condition, can anyone help me please

SunJCarkeY
  • 133
  • 1
  • 1
  • 10

2 Answers2

6

Only iterate on first arraylist with larger length and check for contains in second arraylist , if found set one else do nothing

for(int counter = 0; counter < firstList.size(); counter++) {
    if(secondList.contains(firstList.get(counter))) {
          comparingList.set(counter,1);
      }
  }

Whole java program

Just try to run the below program in http://www.compileonline.com/compile_java_online.php

import java.util.ArrayList;
import java.util.List;

public class CompareArrayListTest{

 public static void main(String[] args) {

    ArrayList<String> firstList = new ArrayList<String>();

    firstList.add("book1");
    firstList.add("book2");
    firstList.add("book3");
    firstList.add("book4");

    ArrayList<String> secondList = new ArrayList<String>();

    secondList.add("book1");
    secondList.add("book2");
    secondList.add("book3");

    List<Integer> comparingList = new ArrayList<Integer>();
    // adding default values as one
    for (int a = 0; a < firstList.size(); a++) {
        comparingList.add(0);

    }

    for (int counter = 0; counter < firstList.size(); counter++) {
        if (secondList.contains(firstList.get(counter))) {
            comparingList.set(counter, 1);
        }
    }

    System.out.println(comparingList);

}

BitSet bitset = new BitSet();
// adding default values as one
for (int a = 0; a < firstList.size(); a++) {
    comparingList.add(0);

}

for (int counter = 0; counter < firstList.size(); counter++) {
    for (int counter2 = 0; counter < secondList.size(); counter++) {
        if (secondList.get(counter2).equals(firstList.get(counter))) {
            bitset.set(counter, 1);
        }
    }
}
Santosh Joshi
  • 3,290
  • 5
  • 36
  • 49
  • what's the problem with the answer ? – Santosh Joshi Nov 24 '13 at 15:23
  • @sunjcarkey the condition is Ok, i have pasted the whole program with the same condition, just check the same in your favourite java editor or online at http://www.compileonline.com/compile_java_online.php – Santosh Joshi Nov 24 '13 at 15:47
  • its bit different than you think..coz..if book2 in firstList and books2 in secondList are equal, 1 will be set in third list in 2nd index. So, that means I need to know the index of book2 in firstList. – SunJCarkeY Nov 24 '13 at 15:48
  • @sunjcarkey then probably your question is not clear, you never mentioned that you want to preserve the order. – Santosh Joshi Nov 24 '13 at 15:53
  • so, now instead of using a new Arraylist to store 0 and 1 for available not available elements. Please try for BitSet to set the corrosponting bit. Added code above in post – Santosh Joshi Nov 24 '13 at 16:04
  • my problem is i can't get thro' if condition. So, I'm having same problem. – SunJCarkeY Nov 24 '13 at 16:40
  • @sunjcarkey, strange, might be an editors problem. you can try running your sample code at http://www.compileonline.com/compile_java_online.php this might help you in understanding whether problem lies with your editor or not. – Santosh Joshi Nov 24 '13 at 16:52
2

You can transform the lists to sets, and then use Set.retainAll method for intersection between the different sets. Once you intersect all sets, you are left with the common elements, and you can transform the resulting set back to a list.

Amir Kost
  • 2,148
  • 1
  • 16
  • 30