java.util.List的remove()方法使用技巧

一.list.remove(i)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(3);
    list.add(4);
         
    for (int i=0; i<list.size(); i++) {
        if (list.get(i) == 3) {
            list.remove(i);//这样写不对,须要写成list.remove(i--) 
        }
    }
         
    System.out.println(list);
}

若是要遍历list进行过滤,好比过滤掉值为3的对象。本觉得这代码再简单不过,可仍是掉坑里了,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的就过滤不完List调用remove(index)方法后,会移除index位置上的元素,index以后的元素就所有依次左移,即索引依次-1要保证能操做全部的数据,须要把index-1,不然原来索引为index+1的元素就没法遍历到(由于原来索引为index+1的数据,在执行移除操做后,索引变成index了,若是没有index-1的操做,就不会遍历到该元素,而是遍历该元素的下一个元素)。java

一样,Map经过keySet()或entrySet()遍历时,不能删除里面的元素,不然会报java.util.ConcurrentModificationException
spa

为了不出现以上状况,须要对List或Map进行遍历且要进行删除操做时必定要使用迭代器Iterator,经过iterator.remove()来删除。code

二.建议使用iterator.remove方法

if (null != list && list.size() > 0) {
    Iterator it = list.iterator();  
    while(it.hasNext()){
        Student stu = (Student)it.next(); 
        if (stu.getStudentId() == studentId) {
            it.remove(); //移除该对象
        }
    }
}
相关文章
相关标签/搜索