foreach(增强for)的使用以及其底层原理
foreach是一个技术名称,是一种遍历方式,通常又可被称为增强的for循环遍历,foreach遍历的关键是记住foreach的遍历格式,foreach形式遍历既可以遍历集合也可以遍历数组。
一、增强for格式
for(被遍历集合或者数组中元素的类型 变量 : 被遍历集合或者数组){
System.out.println(变量);
}
例如:
二、增强for的优点与缺点
优点:简化了数组或集合遍历的迭代写法,foreach遍历在写法上显得更加的简洁和方便;
缺点:增强for无法知道当前已经遍历到了数组的哪个索引位置处,即无法直接获取索引下标;
使用增强for的场景:进行不关注索引下标的数组或集合迭代;
三、增强for的底层实现原理
首先使用IntelliJ IDEA软件的反编译功能对上述的案例的class文件进行反编译,反编译后的案例代码如下:
先来关注数组的增强for循环的底层原理,从下图反编译出的源码可以看出,对数组进行增强for遍历其实底层实现就是运用了普通数组遍历是采用的带索引下标的迭代(遍历):
再来看看对集合使用增强for遍历时其底层实现方式,从下图中可以直观清晰的看出对集合使用增强for遍历就是获取该集合迭代器完成迭代操作,其原理就是获取迭代器(Iterator)对集合元素进行迭代操作:
智能推荐
Android-Scroller使用以及原理
简介 使用scollTo/scollBy方法进行滑动时,这个过程是瞬间完成的,所以用户体验不大好。如果使用 Scroller 来实现有过渡效果的滑动,这个过程不是瞬间完成的,而是在一定的时间间隔内完成的。 Scroller本身是不能实现View的滑动的,它需要与View的computeScroll()方法配合才能实现弹性滑动的效果。 使用 在自定义View的构造函数中初始化Scroller。 重写...
力扣160:相交链表
这一道题的思路: 1、如国两个链表有一个为NULL,那就直接返回NULL; 2、如果两个链表相交,那么搜索的长度=短链表的长度; 3、题目默认不存在val相等,相等,突然不相等的情况; 遇到的问题:测试用例,返回1,预期是8 为什么? 因为题目想要的是节点一样而不是节点值一样,对于两个值为1的节点,他们的前驱是不一样的,因此,第一个相等的节点是值为8的节点 解决的方法: 把判断值相等改为判断链表相...
Windows SDK学习之文本字符相关内容
个人学习,不作他用,视频来源B站 Windows三大核心部件 kernel:内核管理,文件输入与输出,任务管理等 GDI:图形设备接口,负责系统与绘画程序之间的信息交换 user:窗口管理,用户界面 设备环境(Device Context)又称设备上下文或设备描述表,设备环境句柄是程序使用GDI函数的通行证,实际上是GDI内部维护的数据结构,存放文本的一些属性如字体大小等。 获取设备环境句柄 1....
LintCode 逆波兰式求值
逆波兰表达式求值思路:从左到右遍历表达式,遇见数字则进栈,遇见字符则弹出栈顶的两数字计算,计算结果进栈。 case处的代码多余重复了,显得很难看。修改一下,看起来舒服很多,如下: atoi(tokens[i].c_str()) : atoi() 把字符串转成整形数 c_str() 返回字符串的地址...
JAVA中线程知识点--线程的创建与启动(一)
上一篇讲述了进程跟线程的基本概念,这篇就看一下 线程的创建跟启动吧 JAVA中使用Thread代表线程 所以JAVA中所有线程对象都必须为该类或者该类子类的实例,线程被创建用来完成一定的任务,也就是执行特定的代码流。线程执行体则为JAVA中的代码流 创建线程有三种方式,每种都各有特色~~~ 一、继承Thread类,创建子类的实例 ,重写父类run()方法,该run()方法就是执行体,通过调用子类实...
猜你喜欢
CSS之自定义栅格系统
1:一些规范 .col-xs-* 超小屏幕 手机 (<768px) .col-sm-* 小屏幕 平板 (≥768px) .col-md-* 中等屏幕 桌面显示器 (≥992px) .col-lg-* 大屏幕 大桌面显示器 (≥1200px) 2: 代码 3:效果 1:中屏幕 2:小屏幕...
JavaScript——Event Loop事件队列,同步异步操作
目录 理解Event Loop 规则 例题 例题1 顺丰面试题 例题2 比较全面的检测 例题3 来自《深入浅出Node.js》 例题4 Promise的异步 例题4 setTimeout的时间变化 例题5 宏任务和微任务互相穿插 理解Event Loop Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。...
SpringBoot 过滤器 filter 3种方法
文章目录 前言 一、3种配置Spring Boot过滤器的方法 二、web.xml的配置 三、Spring Boot过滤器方式1,使用@WebFilter注解 1.WebFilter的常用属性 2.使用方法 3.代码演示 四、Spring Boot过滤器方式2,使用FilterRegistrationBean 1.自定义类演示 2.第三方jar演示 五、Spring Boot过滤器方式3,实现Se...
Python 的多文件和注释
多文件项目的演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 一个项目通常会包含 很多源文件 目标 在项目中添加多个文件,并且设置文件的执行 多文件项目演练 在 01_Python基础 项目中新建一个 hm_02_第2个Python程序.py 在 hm_02_第2个Python程序.py 文件中添加一句 p...
pytorch卷积层与池化层输出的尺寸的计算公式详解
pytorch卷积层与池化层输出的尺寸的计算公式详解 要设计卷积神经网络的结构,必须匹配层与层之间的输入与输出的尺寸,这就需要较好的计算输出尺寸 先列出公式: 即: 例Conv2d(后面给出实例来讲解计算方法): ` 实例: cove1d:用于文本数据,只对宽度进行卷积,对高度不进行卷积 cove2d:用于图像数据,对宽度和高度都进行卷积 我们在这个实例中抽出网络结构部分: 网络结构为: 输入图片...