在ArrayList中,如果我添加/刪除項目,那麼這被認爲是「修改」列表。因此,如果我嘗試迭代列表,同時嘗試添加/刪除項目,我得到ConcurrentModificationException
(除非我使用listIterator)。我的問題是,如果我做了如下操作:list.get(index).setValue(「newValue」),它仍然被認爲是修改列表嗎?編輯列表中的項目作爲修改列表嗎?
回答
編輯列表中的項目不是「修改列表」:項目被修改,而不是列表。該列表將不知道對這些項目的任何更改。
只有到項目更改引用通過舉行名單是對列表,即修改從列表中插入和選擇來/。
這可能是真的,但我認爲它與'ArrayList'的equals實現相矛盾,它使用'equals'而不是'=='檢查元素相等性 – Katona
只對列表內容(列表中的哪些對象)進行更改將被視爲列表修改。對列表中對象的內部狀態的更改不會更改列表修改計數器。
在病理情況下,我想,改變列表元素的內部狀態可能會間接地觸發列表本身的變化,作爲副作用。我的第一段假設沒有這樣的事情發生。
這是一個替代答案,基於equals
實現ArrayList
,它通過equals
方法檢查元素。所以,讓我們考慮兩個列表與非不變(可變)元素(另一個ArrayList
)list1
和list2
List<String> mutableElement1 = new ArrayList<String>();
ArrayList<List<String>> list1 = new ArrayList<List<String>>();
list1.add(mutableElement1);
List<String> mutableElement2 = new ArrayList<String>();
ArrayList<List<String>> list2 = new ArrayList<List<String>>();
list2.add(mutableElement2);
此時它們包含在同一順序的相同元素,因此
assertEquals(list1, list2);
通行證。然後,我改變了第一個列表的元素:
mutableElement1.add("element");
然後
assertEquals(list1, list2);
失敗。
據此,修改列表的元素也會修改列表。
謝謝。但是我從併發修改概念的視角提出要求 – Victor
- 1. 如何在列表中編輯列表中的項目?
- 2. 修改MS Access列表框中的項目列表
- 3. python修改列表中的項目,保存回列表
- 4. 在ListView中編輯列表項目
- 5. Python能編輯單個列表項嗎?
- 6. 修改單個列表項目
- 7. 修改特定列表項目
- 8. Gradle插件可以修改多模塊項目中的子項目列表嗎?
- 9. 編輯列表視圖控制項目
- 10. 編輯列表<Tuple>項目
- 11. 編輯列表視圖項目
- 12. 編輯Sharepoint列表項目版本
- 13. 在數組列表編碼問題中修改項目
- 14. 如何在Flex列表組件中編輯項目編輯器?
- 15. 修改作爲字典值的列表
- 16. 修改列表的列表OCaml中
- 17. 爲實例列表提供編輯列表的控件,而不是項目
- 18. 首選項中的可編輯列表
- 19. 修改列表
- 20. 修改列表
- 21. 列表修改
- 22. 修改表列
- 23. 列表修改
- 24. 更改列表項中的列表項目
- 25. asp.net:2列列表選項編輯
- 26. 編輯列表
- 27. 如何編輯Python中的列表中的每個項目?
- 28. 我可以在另一個列表中更改列表中的項目嗎?
- 29. 在異步編程中修改列表
- 30. 編輯列表項目的另一列時的SharePoint 2010列依賴項
只是一個方面,你可以通過使用'CopyOnWriteArrayList'來避免'ConcurrentModificationException'。 –