Java基础之增强型for循环

Java基础之增强型for循环目录增强型for循环语法:for(ElementTypeelement:arrayName){};增强for循环的原理增强型for循环注意事项增强型for循环语法:for(ElementTypeelement:arrayName){};举个例子:(1)int[]numArray={1,2,3,4,5,6};for(inti:numArray…

大家好,又见面了,我是你们的朋友全栈君。

目录

增强型for循环语法:for(ElementType element:arrayName){};

增强型for循环删除的问题


增强型for循环语法:for(ElementType element:arrayName){};

举个例子:(1)
int[] numArray = { 1, 2, 3, 4, 5, 6 };
for (int i : numArray) {

    System.out.print(i);
}
//结果会是123456 

测试方法 

public static void testFor() {

	int [] array = {1,2,3};
	for(int i : array){
		System.out.println(i);
	}
	List list = new ArrayList();
	list.add(1);
	list.add(2);
	list.add(3);
	for(Object obj : list){
		System.out.println(obj);
	}

	Map<String, String> map = new HashMap<>();
	map.put("1", "1");
	map.put("2", "2");
	map.put("3", "3");
	for (Map.Entry<String, String> stringStringEntry : map.entrySet()) {
		System.out.println(stringStringEntry.getKey() + stringStringEntry.getValue());
	}

}

使用idea查询编译后的class文件

Java基础之增强型for循环

编译后的文件信息为

public static void testFor() {
	int[] array = new int[]{1, 2, 3};
	int[] arr$ = array;
	int len$ = array.length;

	for(int i$ = 0; i$ < len$; ++i$) {
		int i = arr$[i$];
		System.out.println(i);
	}

	List list = new ArrayList();
	list.add(1);
	list.add(2);
	list.add(3);
	Iterator i$ = list.iterator();

	while(i$.hasNext()) {
		Object obj = i$.next();
		System.out.println(obj);
	}

	Map<String, String> map = new HashMap();
	map.put("1", "1");
	map.put("2", "2");
	map.put("3", "3");
	Iterator i$ = map.entrySet().iterator();

	while(i$.hasNext()) {
		Entry<String, String> stringStringEntry = (Entry)i$.next();
		System.out.println((String)stringStringEntry.getKey() + (String)stringStringEntry.getValue());
	}

}

我们发现增强for循环遍历数组时使用的普通for循环,而遍历集合时使用的Iterator迭代器

增强型for循环删除的问题

 测试Java代码

public static void testFor() {

	List list = new ArrayList();
	list.add(1);
	list.add(2);
	list.add(3);
	for(Object obj : list){
		System.out.println(obj);
		list.remove(obj);
	}

}

编译后的class文件信息

public static void testFor() {
	List list = new ArrayList();
	list.add(1);
	list.add(2);
	list.add(3);
	Iterator i$ = list.iterator();

	while(i$.hasNext()) {
		Object obj = i$.next();
		System.out.println(obj);
		list.remove(obj);
	}

}

 执行后

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
	at java.util.ArrayList$Itr.next(ArrayList.java:831)
	at com.test.controller.TestMain.testFor(TestMain.java:108)
	at com.test.controller.TestMain.main(TestMain.java:23)

解释说明:

迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。

相关源码:

java.util.ArrayList#fastRemove

Java基础之增强型for循环

java.util.ArrayList.Itr#remove

Java基础之增强型for循环

增强型for循环注意事项

  1. 在使用增强型for循环不支持遍历时删除元素
  2. 使用增强型for循环时,对遍历的集合需要做null判断,不然可能引发空指针异常。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149848.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • apache+php环境搭建教程_怎么搭建Php

    apache+php环境搭建教程_怎么搭建PhpApache+PHP环境搭建

  • 波特尔暗空分类法_光辉战机和歼10c对比

    波特尔暗空分类法_光辉战机和歼10c对比传说中的暗之连锁被人们称为 Dark。Dark 是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它。经过研究,你发现 Dark 呈现无向图的结构,图中有 N 个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark 有 N–1 条主要边,并且 Dark 的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark 还有 M 条附加边。你的任务是把 Dark 斩为不连通的两部分。一开始 Dark 的附加边都处于无敌状态,你只能选择一条主要边切断。一旦你切断了一条主要边,Dark

  • 解决Android 网页加载链接 图片不展示问题

    解决Android 网页加载链接 图片不展示问题

  • Ubuntu下代替dos2unix命令

    Ubuntu下代替dos2unix命令Ubuntu系统打开Windows下生成的文本文件,会在每行的末尾出现’^M’原因就是Windows和Linux的回车符是不同的在Windows下回车符是\r\n回车换行在Linux下回车符是\n最简单、最常用的解决方法是使用dos2unix命令转换:dos2unixfilenameUbuntu下dos2unix和unix2dos命令在tofrodos包中

  • 回归分析模型推广_案例分析的意义

    回归分析模型推广_案例分析的意义这个项目呢,就不需要我们做很多的数据清洗的工作了,因为我们手里的数据基本已经做好数据清洗了,我们主要需要做的就是数据可视化和文本挖掘工作。下面我们来一一介绍一下。目录1业务背景1.1分析流程概述1.2市场分类1.3产品生命周期1.4产品结构-波士顿矩阵(BCGMatrix)1.5处理项目需求的基本思路1.6项目需求例子1.7项目背景&产品架构1.8数据说明2驱虫市场的潜力分析2.1分析目的&加载数据2.1.1分析目的2.1.2加载数据2.2清洗&补全数

  • Operand should contain 1 column(s)

    Operand should contain 1 column(s)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号