对加强for循环的感悟

来源:互联网 发布:淘宝店铺分类链接 编辑:程序博客网 时间:2024/05/21 17:35

以前总是对加强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循环是明智的选择,以上只是我自己的理解!

原创粉丝点击