java:使用迭代器时从arraylist中删除元素

时间:2012-02-11 02:38:07

标签: java arraylist iterator

我使用一个对象列表,每个对象包含一个数字和一个字符串名称。当一个具有相同名称的对象在我的列表中两次时,我将其中一个的数量更新为1并删除另一个,到目前为止一直很好。

但是当我从这个列表中删除一个对象时,迭代器仍然会带回我刚刚删除的那个,它不再在列表中了,但我认为它仍然具有相同的位置。

示例:

x 1;
x 1;
y 1;
z 1;

我删除第二个x并更新另一个的计数:

x 2;
y 1;
z 1;

但是现在迭代器把我带回了x 1,它在开头的第二个位置,对于迭代器它仍然看起来像这样:

x 1;
[x1];
y 1;
z 1;

(至少这就是我认为会发生什么,现在尝试几个小时......)

有没有办法告诉迭代器列表已更改? 我刚刚读到了迭代器的remove()方法,我就在这里吗?

1 个答案:

答案 0 :(得分:2)

是的,您应该使用迭代器上的remove方法从集合中删除项目,而不是直接从集合中删除项目。通常,如果在迭代集合时添加或删除元素,则迭代器将不再正常工作。但是,在迭代器上调用remove将正常工作(如果已实现)。

  

迭代器允许调用者在迭代期间使用明确定义的语义从底层集合中删除元素。

     

如果在迭代正在进行的过程中修改基础集合而不是通过调用[remove]来修改迭代器的行为,则不会指定迭代器的行为。


作为旁注,您尝试解决的实际问题似乎与此问题中的问题非常相似,因此您可能还希望在此处查看替代(更简单)方法的答案: