遍历方式:
- for循环遍历:for(int i=0;i<list.size();i++)
- 增强for循环遍历for(String i: list)
- 迭代器遍历:
Iterator it = list.iterator();
while(it.hasNext()) String i = it.next();
删除时出现的问题:
for循环:
for(int i=0;i<list.size();i++){
if(list.get(i).equals("del"))
list.remove(i);
}
报错:java.util.ConcurrentModificationException 异常
原因:删除某个元素后,list的大小也发生了变化,而你的索引也在改变,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际上访问的是第3个。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素的使用。
解决方法:
- 倒过来遍历:
for(int i=list.size()-1;i>=0;i--){
list.remove(i);
}
- 修改索引值:
for(int i=0;i<list.size();i++){
list.remove(i)
i--;
}
增强for循环:
for(String x:list){
list.remove(x);
}
报错:IndexOutOfBoundsException 异常
解决方案:使用迭代器进行删除
Iterator<Character> it = list.iterator();
for(String x:list){
while(iter.hasNext()){
String c2=iter.next();
iter.remove();
}
}
注意
在循环外进行删除时直接调用remove函数进行完成,在循环内删除可以使用迭代器进行删除。