对加强for循环的感悟
2013-09-09 18:40
288 查看
以前总是对加强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循环是明智的选择,以上只是我自己的理解!
当我们分别需要遍历一个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循环是明智的选择,以上只是我自己的理解!
相关文章推荐
- jdk1.5新特性3之加强for循环
- 加强for循环对集合的修改的理解
- jdk1.5新特性3之加强for循环
- Java基础加强:静态导入及可变参数和增强for循环 ,基本数据类型的自动拆箱和装箱
- 可变形参与加强for循环--
- 01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型
- 黑马程序员_java基础加强_增强型for循环
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- Java基础学习笔记(六)加强for循环
- java基础加强(枚举,反射,增强for循环,可变参数,自动拆箱装箱,内省)
- javaweb-day03-1&2(基础加强 - 静态导入、自动装箱/拆箱、增强for循环、可变参数、枚举)
- 黑马程序员____基础加强____静态导入&可变参数&增强for循环
- Java_乔晓松_Java SE 加强-静态导入_自动装拆箱_增强for循环_枚举
- 基础加强_静态导入/可变参数/增强for循环/基本类型包装类
- For-each循环优于for循环感悟
- 盘点JDK1.5的新特性(三)——加强for循环
- 加强for循环
- Java foreach(加强for循环)
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)(set容器里count函数以及加强for循环)