ArrayList删除数据,从前往后遍历,和从后往前遍历有什么区别

1 篇文章 0 订阅
1 篇文章 0 订阅

首先是存在一个效率的问题

比如我一个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);
	}
}

所以从尾部遍历删除数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值