浅谈 foreach 的原理
package com.shenzhou; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class ForeachTest { private static int[] array = { 1, 2, 3 };
private static int[][] arrayTwo = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
private static List<String> list = new ArrayList<String>(); static {
list.add("array - 1");
list.add("array - 2");
list.add("array - 3");
} public static void main(String[] args) {
oldWrite();
newWrite();
foreachTwo();
forList();
iteratorList();
foreachList();
} /**
* 旧形式的遍历
*/
private static void oldWrite() {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
} /**
* 新形式的遍历
* @since JDK5.0
*/
private static void newWrite() {
for (int i : array) {
// foreach实现原理一:实际上本方法去遍历数组的时候使用的是for一样的方式去循环遍历数组
System.out.println(i);
}
} /**
* 新形式对于多维数组的遍历
* @since JDK5.0
*/
private static void foreachTwo() {
for (int[] i : arrayTwo) {
for (int j : i) {
System.out.println(j);
}
}
} /**
* 旧方式遍历集合
*/
private static void forList() {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); }
} /**
* 使用迭代器遍历集合
*/
private static void iteratorList() {
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
System.out.println((String) iterator.next());
}
} /**
* 使用新形式遍历集合
* @since JDK5.0
*/
private static void foreachList() {
for (String string : list) {
// foreach实现原理二:实际上本方法遍历容器使用的方式是通过迭代器来进行的
System.out.println(string);
}
} }
输出结果:
1
2
3
1
2
3
1
2
3
4
5
6
7
8
9
array - 1
array - 2
array - 3
array - 1
array - 2
array - 3
array - 1
array - 2
array - 3
Foreach的原理:
要使用foreach来遍历的对象必须实现Iterable接口,这是因为foreach内部其实是封装了一个迭代器对象来对所要遍历的对象进行迭代,而这个迭代器的来源是通过所要遍历对象的Iterator iterator()方法来 获取的,Iterator iterator()这个方法封装在Iterable接口中,所以要遍历对象必须实现Iterable 接口。
特点:
1.foreach遍历不能对元素进行赋值操作
2.同时只能遍历一个
3.遍历的时候,只有当前被遍历的元素可见,其他不可见
4.只能正向遍历,不能反向
浅谈 foreach 的原理的更多相关文章
- 浅谈html运行原理
浅谈HTML运行原理,所谓的HTML简单的来说就是一个网页,虽然第一节就讲html原理可能大家会听不懂,就当是给一个初步印象把,至少大概知道一个网页的运行流程是怎样的,下面上一张图: 大致的一个htm ...
- 浅谈React工作原理
浅谈React工作原理:https://www.cnblogs.com/yikuu/p/9660932.html 转自:https://cloud.tencent.com/info/63f656e0b ...
- 浅谈一致性Hash原理及应用
在讲一致性Hash之前我们先来讨论一个问题. 问题:现在有亿级用户,每日产生千万级订单,如何将订单进行分片分表? 小A:我们可以按照手机号的尾数进行分片,同一个尾数的手机号写入同一片/同一表中. 大佬 ...
- [iOS]浅谈NSRunloop工作原理和相关应用
一. 认识NSRunloop 1.1 NSRunloop与程序运行 那么具体什么是NSRunLoop呢?其实NSRunLoop的本质是一个消息机制的处理模式.让我们首先来看一下程序的入口——main ...
- 【JDK源码分析】浅谈HashMap的原理
这篇文章给出了这样的一道面试题: 在 HashMap 中存放的一系列键值对,其中键为某个我们自定义的类型.放入 HashMap 后,我们在外部把某一个 key 的属性进行更改,然后我们再用这个 key ...
- 浅谈 pid的原理与差异
pid 官方语言就是:比例 积分 微分.究其本质意义,比例到底是什么,原理是什么,这三个到底如何在物理世界这种运作的,大概了解的人又很少.过惯了拿起数据公式无脑推的日子的人更是如此,数学公式是很 ...
- 浅谈JVM编译原理->.java文件转变为.class文件的过程
为什么需要编译? 我们平常写代码,有规范的命名方式,都能够看得懂,但是我们写的代码计算机是看不懂的,所以需要编译,也就是一个转换的过程,如下: 1.这个是咱们平时写的代码,就比较好理解,对人友好 2. ...
- 浅谈ConcurrentHashMap实现原理
我们都知道HashTable是线程安全的类,因为使用了Synchronized来锁整张Hash表来实现线程安全,让线程独占: ConcurrentHashMap的锁分离技术就是用多个锁来控制对Hash ...
- 浅谈P2P终结者原理及其突破
P2P终结者按正常来说是个很好的网管软件,但是好多人却拿它来,恶意的限制他人的流量,使他人不能正常上网,下面我们就他的功能以及原理还有突破方法做个详细的介绍! 我们先来看看来自在网上PSP的资料:P2 ...
随机推荐
- DB2 Rename SQL0108N错误
今天DB2 Rename的时候遇到了“SQL0108N ‘表名’名称的限定符数是错误的. 语句如下: db2 rename tableA to tableB 异常: SQL0108N The name ...
- acl的基本知识点
#ACL acl number 3001 rule 1 deny udp destination-port eq 445 rule 2 deny tcp destination-por ...
- 微信7.0以上版本fiddler、Charles抓包报HTTPS证书信任问题通报
通报:微信更新到7.0以后抓包公众号会有证书问题,抓包小程序直接不能打开 各位不用到处找了,也不用怀疑人生了,你没有问题.win10也没有问题.fiddler和Charles也没有问题,是因为微信更新 ...
- Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题 原文地址:https://m.oschina.net/question/737237_2203576 现在容器用的是tomcat,做维 ...
- Java常用的线程池
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...
- jqgrid使用(1)生成表格
1.引入js,css 2,基本配置 function init() { $("#list1").jqGrid({ url: "../Listing.ashx", ...
- ARCGIS 出图显示not map metafile into memory.Not enough memory
有许多的原因,比如系统有问题,磁盘空间不够,或虚拟内存设置不对等.再有就是输出地图时分辨率的设置是否太大等. not enough memory 这个问题是ESRI的一个所谓的“臭名昭著 ...
- sp_settriggerorder 设置触发器执行顺序
sp_settriggerorder (Transact-SQL) 本主题适用于:SQL Server(从 2008 开始)Azure SQL 数据库Azure SQL 数据仓库并行数据仓库 ...
- vue事件深入
事件对象: @click="show($event)" ev.clientX---接收 事件冒泡: 阻止冒泡: 1. ev.cancelBubble=true; 2.@click. ...
- MyBatis 工作原理
参考链接: 深入理解Mybatis原理:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis原理:http://www.jia ...