Java的for循环、增强for循环、lambda表达式中的forEach 三种方式优缺点比较?

Python010

Java的for循环、增强for循环、lambda表达式中的forEach 三种方式优缺点比较?,第1张

个人理解不喜勿喷。简单的来说其实三种并没有什么太大的区别,一般情况下的性能也差不多。for循环:优点:可以直接获取下标,能更精确的定位。下标变量属于循环内变量,循环结束会自动回收。下标变量的步长可以自定,比较灵活。缺点:需要根据下标才会获取循环内容。只能循环有序集合和数组,如Set和Map就无法遍历。增强for:优点:循环直接进行赋值,直接得到循环对象,不需要通过下标获取。可以遍历所有集合类型和数组。缺点:循环有序集合时无法定位下标,需要在循环外层定义下标。无法遍历Map类型。lambda:优点:可以对所有集合类型和Map进行循环,特别是支持对Map进行循环,循环也是直接进行赋值,直接得到循环对象。缺点:循环有序集合时无法定位下标,无法遍历数组,因为理论上来说他是属于迭代器的一种。同时因为循环体属于一个封闭范围的线程,在循环体内使用部分循环体外的变量需要加final关键字,很不方便。另外说到了迭代器,可以参考lambda,不过写法就没lmbda那么方便了,不过迭代器有很多功能是循环比不上的,可以去看看。

在for循环里面如果有if语句判断,当业务中有一条符合要求并且取到合适的值的时候,这时候可以在if判断完后加一个break,这样for循环语句不会一直循环下去,节约了程序的性能

java中迭代器效率高

ArrayList实现了RandomAccess接口,RandomAccess接口为ArrayList带来了什么好处呢?

我们查看一下RandomAccess的源码文档,发现有这样一段描述:

As a rule of thumb, a List implementation should implement this interface if, for typical instances of the class, this loop:

for (int i=0, n=list.size()i <ni++)

list.get(i)

runs faster than this loop:

for (Iterator i=list.iterator()i.hasNext())

i.next()

从描述中,可以看出实现RandomAccess接口的集合类,使用for循环的效率会比Iterator高。

RandomAccess接口为ArrayList带来的好处:

1、可以快速随机访问集合。

2、使用快速随机访问(for循环)效率可以高于Iterator。