码迷,mamicode.com
首页 > 编程语言 > 详细

java 中list进行动态remove处理

时间:2017-11-13 00:08:44      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:动态删除   ++   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();  
    }  
}

 

java 中list进行动态remove处理

标签:动态删除   ++   iter   情况   ==   lis   nbsp   remove   bounds   

原文地址:http://www.cnblogs.com/dashuai01/p/7823387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!