2012-02-11 77 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]之外的任何其他方式進行迭代時修改了基礎集合,則未指定迭代器的行爲。


作爲一個側面說明,你正在試圖解決的實際問題似乎是非常相似的人在這個問題,所以您可能還需要在答案看看這裏的替代性(簡單)方法: