标签:动态删除 ++ iter 情况 == lis nbsp remove bounds
java中遍历 list遇到需要动态删除arraylist中的一些元素 的情况
错误的方式
for(int i = 0, len = list.size(); i < len; i++){ if(list.get(i) == 1) { list.remove(i); } }
这样会抛出异常
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source
这个异常是因为删除元素之后未改变相应角标,遍历到最后一个 的时候 就会找不到抛出 这个异常
正确做法删除下标以及定位到遍历位置
for(int i = 0, len = list.size(); i < len; i++){ if(list.get(i) == 1){ list.remove(i); len--; i--; } }
或者使用Java的Iterator接口来实现遍历
Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ int i = iterator.next(); if(i == 1){ iterator.remove(); } }
标签:动态删除 ++ iter 情况 == lis nbsp remove bounds
原文地址:http://www.cnblogs.com/dashuai01/p/7823387.html