【java细节】for循环,for-each(增强for循环),forEach以及Iterator迭代器对比
一、背景和结论
背景是这样的,产品开发过程中,有个字体json文件需要截取的接口开发,因为涉及到多层的json内容遍历,于是就和循环过不去了。这篇文章主要讨论java中for循环,for-each(增强for循环),forEach以及Iterator迭代器的区别和联系。结论先行:
联系:
- 1.作用相同.都是用于队数组或者集合进行遍历
区别:
- 效率差别: for循环,for-each循环和Iterator效率差不多,forEach要慢些。
- 条件区别: for循环需要知道数组或者集合的大小才能进行遍历,而for-each,forEach和Iterator不需要
- 多态区别: for循环,for-each和forEach都需要先知道集合的类型,甚至是集合内元素的类型,即需要访问内部的成员,不能实现多态;
Iterator是一个接口类型,他不关心集合或者数组的类型,而且他还能随时修改和删除集合的元素,举个例子:
Iterator iterator = integerList.iterator();
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
}
当我们需要遍历不同的集合时,我们只需要传递集合的iterator,如integerList.iterator(),这就 是Iterator 的好处,他不包含任何有关他所遍历的集合的类型信息,能够将遍历集合的操作与集合底层的数据结构分离。迭代器统一了对集合的访问方式。这也是接口解耦的最佳实践之一。
- 适用场景区别:
for循环一般用来处理比较复杂的循环,可预知大小的集合或数组。因为涉及索引的操作,**可能会由于开发者的问题导致索引混乱,因此不太安全。**涉及集合元素更新操作的建议用for循环。
for-each可用于遍历任何集合或数组,而且操作简单易懂,但是需要了解集合内部数据类型,并且不适合有数组元素更新操作的循环。
forEach 基本和Iter