java – 为什么这个代码不会导致ConcurrentModificationExceptio
发布时间:2020-12-14 06:01:40 所属栏目:Java 来源:网络整理
导读:我正在阅读关于ConcurrentModificationException和如何避免它.发现 an article.该文章中的第一个列表的代码类似于以下内容,这显然会引起例外: ListString myList = new ArrayListString();myList.add("January");myList.add("February");myList.add("March"
我正在阅读关于ConcurrentModificationException和如何避免它.发现
an article.该文章中的第一个列表的代码类似于以下内容,这显然会引起例外:
List<String> myList = new ArrayList<String>(); myList.add("January"); myList.add("February"); myList.add("March"); Iterator<String> it = myList.iterator(); while(it.hasNext()) { String item = it.next(); if("February".equals(item)) { myList.remove(item); } } for (String item : myList) { System.out.println(item); } 然后继续解释如何用各种建议来解决问题. 当我试图重现它,我没有得到例外!为什么我没有得到例外? 解决方法
根据Java API docs
Iterator.hasNext不会引发ConcurrentModificationException.
检查“1月”和“2月”后,从列表中删除一个元素.调用it.hasNext()不会引发ConcurrentModificationException但返回false.因此,您的代码完全退出.最后一个字符串从不被检查.如果您将“April”添加到列表中,则按预期得到“异常”. import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class Main { public static void main(String args[]) { List<String> myList = new ArrayList<String>(); myList.add("January"); myList.add("February"); myList.add("March"); myList.add("April"); Iterator<String> it = myList.iterator(); while(it.hasNext()) { String item = it.next(); System.out.println("Checking: " + item); if("February".equals(item)) { myList.remove(item); } } for (String item : myList) { System.out.println(item); } } } http://ideone.com/VKhHWN (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |