为什么这个ArrayList代码会出错?

时间:2014-03-19 07:55:40

标签: java arraylist

我期望1 c 3 o获得结果。但只得到1 c 3 o 5 c。 代码有什么问题?

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

A_array.add(0,"c");   B_array.add(0,1);
A_array.add(1,"c");   B_array.add(1,2);
A_array.add(2,"o");   B_array.add(2,3);
A_array.add(3,"c");   B_array.add(3,4);
A_array.add(4,"c");   B_array.add(4,5);
A_array.add(5,"c");   B_array.add(5,6);    

for(int i=0;i<B_array.size()-1;i++)
{
   for(int j=i+1;j<B_array.size();j++)
   {
      if(A_array.get(i)==A_array.get(j))
      {
         B_array.remove(j);A_array.remove(j);
      }
   }
}
for(int i=0;i<B_array.size();i++)
{
   System.out.println(B_array.get(i)+" "+A_array.get(i));
}

2 个答案:

答案 0 :(得分:1)

因为你正在修改数组并删除元素,所以你应该更新索引,这里我建议使用迭代器,然后使用iterator.remove

for (Iterator<String> iterator = B_array.iterator(); iterator.hasNext();) {
    String value = iterator.next();
    if(equals) {
        iterator.remove();
    }   
}

答案 1 :(得分:1)

要安全删除Iterable中的对象,例如List,请使用Iterator

Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
    String s = iterator.next();
    if(some comdition on s) {
        iterator.remove();
    }
}