比较两个array-list元素并获取非公共元素

时间:2016-03-29 10:02:23

标签: android arraylist compare

  • 我做过这样的事情:

    public class MainActivity extends AppCompatActivity {
    
        ArrayList<String> al = new ArrayList<String>();
        ArrayList<String> a2 = new ArrayList<String>();
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            al.add("C");
            al.add("A");
            al.add("E");
            al.add("B");
            al.add("D");
            al.add("F");
    
            a2.add("C");
            a2.add("C");
            a2.add("E");
            a2.add("B");
            a2.add("D");
            a2.add("F");
    
    
            for (int i = 0; i < al.size(); i++) {
                for (int j = 0; j < a2.size(); j++) {
    
                    if (al.get(i).equals(a2.get(j))) {
                        a2.remove(j);
                        Log.e("array 2 ", a2.toString());
                        break;
                    }
    
                }
            }
         } 
      }
    

- 但我的输出是这样的:

[C, E, B, D, F]
[C, B, D, F]
[C, D, F]
[C, F]
[C]

- 我在arraylist 2中有相同的元素,然后我也得到'C',它应该是null .i.e零非共同值。

4 个答案:

答案 0 :(得分:2)

当您在for循环中直接删除a2项时,您正在弄乱索引。请参阅下面的解决方案

        ArrayList<String> al = new ArrayList<>();
        ArrayList<String> a2 = new ArrayList<>();
        al.add("C");
        al.add("A");
        al.add("E");
        al.add("B");
        al.add("D");
        al.add("F");

        a2.add("C");
        a2.add("C");
        a2.add("E");
        a2.add("B");
        a2.add("D");
        a2.add("F");

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

        for (int i = 0; i < al.size(); i++) {
            for (int j = 0; j < a2.size(); j++) {
                if (al.get(i).equals(a2.get(j))) {
                    tempToDelete.add(a2.get(j));
                    break;
                }

            }
        }

        a2.removeAll(tempToDelete);

对于更短的方法,您可以这样做:

a2.removeAll(al);

答案 1 :(得分:1)

试试这会帮到你

     ArrayList<String> al = new ArrayList<String>();
     ArrayList<String> a2 = new ArrayList<String>();

    al.add("C");
    al.add("A");
    al.add("E");
    al.add("B");
    al.add("D");
    al.add("F");

    a2.add("C");
    a2.add("C");
    a2.add("E");
    a2.add("B");
    a2.add("D");
    a2.add("F");

   Integer a = null;
 for (int i=0; i<a1.size(); i++)
  {
    a = a1.get(i);

    if (a2.contains(a)
{
    a2.remove(a);
    a1.remove(a);
    i--;
 }
 }

ArrayList<String> finaldata = new ArrayList<String>();
finaldata.addAll(a1);
finaldata.addAll(a2);
// finaldata = { A}

答案 2 :(得分:0)

我建议您使用Set而不是ArrayList。您可以找到一些信息here

此外,您可以在此处阅读set operationsstackoverflow answer中使用java Set的一些示例。

答案 3 :(得分:0)

只需将break;替换为:

j = -1;

代码:

 for (int i = 0; i < al.size(); i++) {
        for (int j = 0; j < a2.size(); j++) {

            if (al.get(i).equals(a2.get(j))) {
                a2.remove(j);
                Log.e("array 2 ", a2.toString());
                j = -1;

            }

        }
    }