对加强for循环的感悟

以前总是对加强for循环这个东西存在疑虑,难道仅仅比普通的for循环写起来更好看,更顺眼?性能上果真没有差异吗?今天看java数据结构的时候,突然想明白了这个问题,在一些时候,加强for循环会比普通的for循环效率高很多,大家一般在遍历list的时候都会使用加强for循环,但是为什么这样用,相信没有多少人明白其中的道理,ArrayList和LinkedList的区别相信大家都知道,ArrayList类似于数组的结构,删除和插入元素的时候,这个元素后面所有的元素都会移动变化,所以效率不高,但是查询的时候,因为元素有下标所以能够很快的查找出来,而LinkedList恰恰相反,插入和修改元素的时候,仅仅需要修改前后元素的引用就可以,所有元素位置都不需要移动,所以效率会很高,但是查询的时候就要去遍历整个链表了,效率自然就低了。

当我们分别需要遍历一个ArrayList和LinkedList的元素求和的时候,如果用普通for循环,ArrayList调用自己的get方法,一个个的取出来,效率很高,所用时间为O(N),但是LinkedList却由于自身结构的原因效率就很低了,所用时间为O(N2),这时候加强for循环就派上用场 了,加强for循环的原理就是利用iterator遍历容器会使被遍历的list有效的从一项到下一项的推进,而不是像普通for循环一样调用list的get方法,对于LinkedList来说,每调用一次get都会遍历链表,这样,无论是ArrayList还是LinkedList,他们所用的时间都会是O(N)。

所以在遍历list的时候使用加强for循环是明智的选择,以上只是我自己的理解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值