因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。可以对上面的程序进行如下改进:for(int i = 0 , len= list.size();i if(list.get(i)==XXX){ list.remove(i); --len;//减少一个 } } List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。(一般都用这种)