我做过这样的事情:
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。即零非常见值。
最佳答案
当您直接在 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);
关于android - 比较两个数组列表元素并获取不常见的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36281136/