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(); } }