我做过这样的事情:
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零非共同值。
答案 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 operations中stackoverflow 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;
}
}
}