2012-02-11 76 views
0

我使用一个对象列表,每个对象都包含一个数字和一个字符串名称。当名称相同的对象在我的列表中是两次时,我将其中一个对象的数量更新为1,并删除另一个,迄今为止这么好。java:使用迭代器从arraylist中删除元素

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

例如:

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

我删除第二个X和更新另一个的计数:

x 2; 
y 1; 
z 1; 

但现在的迭代器让我想起在x 1这是在两个位置开始,对于迭代器,它仍然是这样的:

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

(至少这是我所知道的nk会发生什么,现在尝试几个小时..)

有没有什么办法告诉迭代器列表已经改变? 我刚刚阅读了关于迭代器的remove()方法,我就在这里?

回答

2

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

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

如果在调用[remove]之外的任何其他方式进行迭代时修改了基础集合,则未指定迭代器的行为。


作为一个侧面说明,你正在试图解决的实际问题似乎是非常相似的人在这个问题,所以您可能还需要在答案看看这里的替代性(简单)方法: