2016-08-05 35 views
-7

我測試了Iterator接口的next()remove()方法。我有以下異常:爲什麼下面的代碼使用Iterator的next()和remove()拋出ConcurrentModificationException?

在線程異常 「主要」 java.util.ConcurrentModificationException

這裏是我的代碼:

import java.util.*; 

public class ListTest { 
    public static void main(String[] args) { 
     Collection<Integer> list = new ArrayList<Integer>(); 
     Iterator<Integer> iterator = list.iterator(); 

     Collections.addAll(list, 1, 2, 3, 4, 5); 
     if (iterator.hasNext()) { 
      iterator.next(); 
      iterator.remove(); 
     } 

     System.out.println(list); 
    } 
} 
+0

它可能更好地接近重複這裏的答案解釋絕對沒有關於異常。 –

+1

@DenysSé[email protected]éguret你是對的,我在我的答案中增加了更多細節來解釋一下更多 –

+0

@NicolasFilotto *現在*你回答這個問題:) –

回答

6

沒有您的Iterator使用沒有問題的next()remove()

您的ConcurrentModificationException是由於在創建Iterator後向List添加了元素而導致的。

在創建Iterator之前,您應該將元素添加到List

變化:

Iterator<Integer> iterator = list.iterator(); 
Collections.addAll(list, 1, 2, 3, 4, 5); 

到:

Collections.addAll(list, 1, 2, 3, 4, 5); 
Iterator<Integer> iterator = list.iterator(); 

和你的循環將正常工作。

4

,因爲您可以通過添加元素修改List沙爹你得到這個異常已經創建了迭代器,所以當你在你的迭代器調用next(),在內部它檢查是否底層List已被修改後,如果是它提出了一個ConcurrentModificationException這裏就是這種情況。

嘗試相反順序爲下一個:

Collections.addAll(list, 1, 2, 3, 4, 5); 
Iterator<Integer> iterator = list.iterator(); 
相關問題