遍歷List 同時 remove 元素
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(3);
- list.add(4);
- list.add(5);
- list.add(6);
- for (Iterator<Integer> iter = list.iterator(); iter.hasNext();)
- {
- int i = iter.next();
- if (i == 3)
- {
- list.remove(i);
- }
- }
執行上邊的程式碼就會報錯:
API中此異常的解釋:當方法檢測到物件的併發修改,但不允許這種修改時,丟擲此異常。
原因:
Iterator 是工作在一個獨立的執行緒中,並且擁有一個 mutex 鎖。 Iterator 被建立之後會建立一個指向原來物件的單鏈索引表,當原來的物件數量發生變化時,這個索引表的內容不會同步改變,所以當索引指標往後移動的時候就找不到要迭代的物件,所以按照 fail-fast 原則 Iterator 會馬上丟擲 java.util.ConcurrentModificationException 異常。
所以 Iterator 在工作的時候是不允許被迭代的物件被改變的。但你可以使用 Iterator 本身的方法 remove() 來刪除物件, Iterator.remove() 方法會在刪除當前迭代物件的同時維護索引的一致性。
網上找的解決方法:
1.倒過來遍歷list
- for (int i = list.size()-1; i >=0; i--)
- {
- int item = list.get(i);
- if (item == 3)
- {
- list.remove(item);
- }
- }
2.每移除一個元素以後再把i移回來
- for (int i = 0; i < list.size(); i++)
- {
- int item = list.get(i);
- if (item == 3)
- {
- list.remove(item);
- i=i-1;
- }
- }
3.使用iterator.remove()方法刪除
- for (Iterator<Integer> iter = list.iterator(); iter.hasNext();)
- {
- int item = iter.next();
- if (item == 3)
- {
- iter.remove();
- }
- }
相關文章
- List,Map在遍歷的時候removeREM
- jsp頁面中同時遍歷多個list集合JS
- Lambda 表示式遍歷集合時用remove方法刪除list集合中滿足條件的元素問題REM
- jQuery 元素操作——遍歷元素jQuery
- java list最優遍歷Java
- **PHP二維陣列遍歷時同時賦值PHP陣列賦值
- DOM元素的遍歷
- Jquery之遍歷元素jQuery
- 在flask中同時遍歷兩個list中的資料並一一對應顯示Flask
- vector容器1(新增元素,遍歷元素)
- Python中list的遍歷Python
- hashmap遍歷時用map.remove方法為什麼會報錯?HashMapREM
- Html遍歷物件、list集合、陣列HTML物件陣列
- 關於二叉樹的前序遍歷、中序遍歷、刪除元素、插入元素二叉樹
- 集合框架(List儲存字串並遍歷)框架字串
- java List<HashMap<String,Object>> 遍歷修改JavaHashMapObject
- HashSet 新增/遍歷元素原始碼分析原始碼
- jquery遍歷子元素的寫法jQuery
- PHP 遍歷元素並分批處理PHP
- java陣列如何遍歷全部的元素Java陣列
- JavaScript遍歷陣列每一個元素JavaScript陣列
- for in語句遍歷陣列中的元素陣列
- javascript使用for in語句遍歷陣列元素JavaScript陣列
- js如何遍歷陣列中的元素JS陣列
- C++11::遍歷tuple中的元素C++
- js遍歷拼接list集合物件,JSONArray陣列物件JSON陣列
- Remove Duplicates from Sorted ListREM
- puppeteer 頁面爬取例項(元素遍歷)
- 利用jQuery如何遍歷指定的li元素集合jQuery
- javascript遍歷陣列元素程式碼例項JavaScript陣列
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- Remove-duplicates-from-sorted-listREM
- Java List的remove()方法陷阱JavaREM
- jQuery遍歷array陣列元素程式碼例項jQuery陣列
- Python中使用 for 迴圈來拿遍歷 List 的值Python
- golang遍歷channel時return問題Golang
- javascript如何遍歷陣列中的每一個元素JavaScript陣列
- 遍歷聚合物件中的元素——迭代器模式(四)物件模式