首先是存在一个效率的问题
比如我一个ArrayList数组中有[a,b,c,d] 这时我要删除 a,b,c三个数据如果是从前往后遍历的话
数组内容 删除数据 删除过后的数组内容 下标变换次数
[a,b,c,d] a [b,c,d] 3
[b,c,d] b [c,d] 2
[c,d] c [d] 1
总变化次数为 3 + 2 + 1 = 6
从后往前的话
数组内容 删除数据 删除过后的数组内容 下标变换次数
[a,b,c,d] c [a,b,d] 1
[a,b,d] b [a,d] 1
[a,d] a [d] 1
总变化次数为 1 + 1 + 1 = 3
所以综上所述,从尾部遍历可以减少系统底层的操作次数,进而提升效率。
2.从头往前遍历有可能删不干净,因为下标是变化的
[a,b,c,d] 删除 [a,b,c]
for(i=0;i<list.lenth();i++){
if(list.get(i)=="a" && list.get(i)=="b" && list.get(i)=="c"){
//第一次循环这时i==0
// list.get(i)== "a" 所以删除 "a"
//这时b在ArrayList数组中下标变成了0 ,而下次循环 i++
// i就等于1了 ,会直接删除"c" ,就会漏删 "b" 所以删除数据的话
// 从前往后删除会漏删数据,如果是从尾部删除的话 一直以下标最后一
// 个为基准,不会漏删数据
list.remove(i);
}
}
所以从尾部遍历删除数据