思考下面这段代码的结果:
想必大家都知道结果是[b,d]
因为当一个元素被删除时,列表的大小缩小并且下标变化,当删除了元素a之后,列表的长度变为3,列表变为[b,c,d],所以当i=1的时候,其实删除的是元素c,列表变为[b,d],循环结束。
如下代码是有名的ConcurrentModificationException异常
这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉。
解决方法如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
list.remove(i);
}
System.out.println(list);
想必大家都知道结果是[b,d]
因为当一个元素被删除时,列表的大小缩小并且下标变化,当删除了元素a之后,列表的长度变为3,列表变为[b,c,d],所以当i=1的时候,其实删除的是元素c,列表变为[b,d],循环结束。
如下代码是有名的ConcurrentModificationException异常
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(String s:list){
if(s.equals("a")){
list.remove(s);
}
}
这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉。
解决方法如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
String s = iter.next();
if(s.equals("a")){
iter.remove();
}
}