Android 比较两个数组列表元素并获取非公共元素

Android 比较两个数组列表元素并获取非公共元素,android,arraylist,compare,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 savedI

我做过这样的事情:

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”,它应该是空的。也就是说,非公共值为零。

试试这个,它会帮助你的

     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}
ArrayList al=new ArrayList();
ArrayList a2=新的ArrayList();
al.添加(“C”);
al.添加(“A”);
al.添加(“E”);
al.添加(“B”);
al.添加(“D”);
al.添加(“F”);
a2.添加(“C”);
a2.添加(“C”);
a2.添加(“E”);
a2.添加(“B”);
a2.添加(“D”);
a2.添加(“F”);
整数a=null;

对于(inti=0;i当您直接删除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);

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


此外,您还可以在这里阅读一些在中使用java集的示例。

只需将
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;

            }

        }
    }
for(int i=0;i
al.removeAll(a2)
删除
al
a2
之间的公共项。阅读更多
Java
中的final is关键字非常感谢,我尝试了这两种方法,首先对对象数组列表很好地工作。您的解决方案节省了我的时间,干杯:)
 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;

            }

        }
    }