增强型for循环

何为增强型for循环呢,在我第一次看到for中竟然可以添加其他的参数时,感觉到比较困惑,我看到的内容是:

int[] a = {1,2,3}
for(int i : a){......
}

看到的时候整个人是困惑的,这样一个循环是什么意思呢?
通过观察代码含义后得知此循环叫增强型for循环,是用于数组和集合(Collection)中的for循环,可以实现数组或集合的遍历,其本质是通过for循环实现对迭代器的调用,下面是我对该内容的整理:

foreach的语法:

for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){

}

foreach在作用上和for循环在循环数组时是相同,都是可以实现遍历数组的目的,但二者之间略有差别。

for循环遍历数组本质上是遍历数组下标,即先找到索引,再连接数组元素,而foreach循环是基于Iterator来实现的,所以foreach是每次访问该元素的下一个元素的地址,来实现的直接元素访问。

因为for循环实现了遍历数组下标,所以可以直接的对元素值进行删除,但因其地址并未被删除,所以可以直接将后元素的值对前元素进行赋值,即可另值消失。

因为foreach是基于Iterator实现的,直接访问的是下一个元素的地址,所以在其中无法实现直接的数组元素删除,需要借助Iterator中定义的remove方法来对某元素实现删除,该删除直接删除的为元素地址,但在删除元素后,foreach中定义的某变量值会发生改变,当其值发生改变时会造成安全隐患,如果循环继续运行,则Java会抛出异常。

所以我们通常是不可以使用foreach来实现元素的删除的,如果需要将元素进行删除时,需要采用for循环,而不能采用foreach循环。

我们讨论了二者之间差别,那我们也要考虑他们的效率问题:

需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。

需要循环链表结构的数据(集合)时,一般不要使用普通for循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。

所以当我们循环集合时采用foreach效率会有所提高,当我们循环数组时,二者效率相差不多,为方便删除数组元素,可以使用标准的for循环。

foreach(增强型for循环)相关推荐

  1. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换

    一.集合的相关应用 1.1 将一个集合加到另一个集合上 boolean addAll(Collection c) 将给定集合中的所有元素添加到当前集合中.调用方法之后只要c1集合发生变化就返回true ...

  2. java增强型for循环(三种遍历集合方式)

    For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如泛型.自动装箱等). For-Each循环的加入 ...

  3. 增强型for循环的使用,看这篇就够了

        从开始接触Java编程时,简单的循环遍历(for.while.do-while)都是与其他编程语言(C语言.C++- -)大致一样的,这些我们自己都看得懂,当然自己也会写.但是学习到后面的课程 ...

  4. 增强型for循环,与for循环在代码上的差别!

    增强型for循环,与for循环在代码上的差别! foreach循环是在JDK1.5之后,带来的新特性,其语法形式如下: for(类型 变量 :集合数据|数组){//自动将数组内容设置给变量.//好处: ...

  5. java foreach和for循环区别_java相关:老生常谈foreach(增强for循环)和for的区别

    java相关:老生常谈foreach(增强for循环)和for的区别 发布于 2020-8-18| 复制链接 下面小妖就为大家带来一篇老生常谈foreach(增强for循环)和for的区别.小妖觉得挺 ...

  6. Java流程控制03 循环结构 While循环 DoWhile循环 For循环 增强型For循环

    1. While循环 while(布尔表达式){//循环内容 } a. 只要布尔表达式为true,循环就会一直执行下去. b. 大多数情况下要让循环停止,徐亚一个让表达式失效的方式来结束循环. c. ...

  7. 遍历集合的两种方式:迭代器和增强型for循环

    package drchen.java.demo02;/*遍历集合有两种方式: 1.迭代器(步骤如下)step1:构建集合,并往里面添加元素step2:通过集合对象获取迭代器对象step3:使用whi ...

  8. Java基础【之】循环、流程控制 (if else、whitch case、while、do while、for...i、foreach、多层循环与退出)

    Java基础[之]循环.流程控制 (if else.whitch case.while.do while.for...i.foreach.多层循环与退出) 1.默认顺序执行 2.分支控制 if els ...

  9. Java_数组(声明、创建、初始化、复制、增强型for循环、二维数组、排序、Arrays类)

    Java_数组 数组的基本概念 声明数组 创建数组 初始化数组 方法一:分配空间与赋值分步进行 方法二:分配空间,同时赋值 增强型for循环 复制数组 二维数组 排序 Arrays类 copyOfRa ...

最新文章

  1. NBT:PICRUSt2预测宏基因组功能
  2. 配置一个Servlet可以被一个(指定的开头链接,后自定义)访问
  3. 换脸系列——整脸替换
  4. diff算法_详解 React 16 的 Diff 策略
  5. HDU5765 Bonds 最小割极
  6. Anylogic遇到问题的解决
  7. 数学 平面内 两直线 两个向量的夹角计算公式 C++实现
  8. matlab正激变换器,12个步骤设计恒流正激式开关电源
  9. python接收163邮件以及下载附件(以163邮箱为例)
  10. 现代电力电子期末考试
  11. pe怎么看计算机mac地址,在winPE下肿么看MAC地址 急求!!!
  12. 为什么vs数据库中文显示问号_oracle中文显示为问号
  13. [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
  14. 项目部署到SVN上以及SVN修改项目名称详细步骤
  15. ECMAScript6常用语法
  16. singletask和onNewintent
  17. linux服务器重启日志,Linux系统最近重启时间、错误日志
  18. 如何成为一名优秀的网络工程师?
  19. 编程猫创作工具:新版Kitten新体验
  20. 人工智能AI程序设计语言简介

热门文章

  1. mysql显示表_MYSQL显示表
  2. REANA-自动驾驶功能安全开发工具-功能安全ISO26262、预期功能安全(SOTIF)ISO21448、网络信息安全(Cybersecurity)ISO21434
  3. Linux之curl命令用法指南学习
  4. 技术越好的的人越谦虚
  5. Kafka-消费者组三种分区分配策略Range Assignor、RoundRobin Assignor、Sticky Assignor详细解析
  6. Android LOG系统原理剖析
  7. 远离细菌和尴尬,舒护怡成人纸尿裤呵护失禁长者的身心健康
  8. lxc mysql 使用_LXC容器
  9. .excel文件突然损坏变为.tmp格式解决办法
  10. 词法分析器java_利用Java实现简单的词法分析器实例代码