-
如果使用普通for循环直接删除会出现IndexOutOfBoundsException异常,非法索引。
ArrayList<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("2"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); // 这样做肯定抛异常,非法访问数据越界 int len = list.size(); for (int i = 0; i < len; i++) { if("1".equals(list.get(i))){ list.remove(i); } } //Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 //改进后,删除元素后更新List长度,更新循环下标。但是这样的可读性很差。鬼知道你在写什么。。。 int len = list.size(); for (int i = 0; i < len; i++) { if("1".equals(list.get(i))){ list.remove(i); --len; --i; } } //另外一种方式 Iterator<String> sListIterator = list.iterator(); while(sListIterator.hasNext()){ String e = sListIterator.next(); //注意了 if(e.equals("1")){ sListIterator.remove(); } }
作者水平有限,下一章分析源码。而且这两种方式存在线程安全问题。。。