增强for循环 -- foreach循环
1 作用
简化迭代器的书写格式。(注意:foreach循环的底层还是使用了迭代器遍历。)
2 适用范围
如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环。
3 格式
for(数据类型 变量名 :遍历的目标){
}
示例:
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("张三");
set.add("李四");
set.add("王五");
}
若想遍历这个集合,可以用迭代器
//使用迭代器遍历集合
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println("集合的元素为: " + it.next());
}
有没有更简洁的办法呢?可以用foreach循环
for(String it : set){
System.out.println("集合的元素:" + it);
}
这个循环应该读作 -- “循环set中的每一个元素”(for each element in set)
4 foreach循环的优点在于:相比普通for循环来更加简洁,更加不容易出错(不必为数组下标的起始值和终止值担心)
5 foreach循环应该注意的事项:
(1). foreach循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用foreach循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改。
也就是说:
for(String it : set){
System.out.println("集合的元素:" + it);
set.remove("it");
}
上面这个调用remove方法是错误的!
(2). 普通for循环与foreach循环的区别:普通for循环可以没有变量的目标,而foreach循环一定要有变量的目标。
6 缺点:在对数组索引进行操作或者集合进行增删操作时,显得力不从心,此时不建议使用foreach循环
回顾第二点,它的使用范围,如果现在有一个Map集合,怎么对它使用foreach循环?
通过查看API文档可得知,Map集合没有实现Iterable接口,所以Map集合不能直接使用foreach循环

但是它有一个entrySet方法(Map的迭代方法),它的返回类型是Set<Map.Entry<K,V>>:

我们知道Set接口下是实现了Iterable接口的:

所以我们可以这样:
HashMap<String, String> map = new HashMap<String, String>();
map.put("001","张三");
map.put("002","李四");
map.put("003","王五");
map.put("004","赵六");
Set<Map.Entry<String, String>> entrys = map.entrySet();
for(Map.Entry<String, String> entry : entrys){
System.out.println("键:"+ entry.getKey()+" 值:"+ entry.getValue());
}
最后的建议:若没有其他操作,单单遍历循环,能用foreach循环就用这个
最后的最后:这是JDK1.5时才存在的!
增强for循环 -- foreach循环的更多相关文章
- for循环,for…in循环,forEach循环的区别
for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...
- java 流程执行 循环 foreach循环
一. if分支 1. 结构 if else if else 2.执行原则 if if if 结构 会一直去执行()里的判断语句 if else if else if 结构 只要一条( ...
- JavaScript之数组循环 forEach 循环输出数组元素
var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...
- 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException
摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...
- foreach循环里不能remove/add元素的原理
foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素.Java语言从JDK 1.5.0开始引入forea ...
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- PHP 循环 - For 循环基础讲解
PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...
- “全栈2019”Java第三十二章:增强for循环Foreach语法
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java中的增强 for 循环 foreach
foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...
随机推荐
- 消息映射(C++)(转)
摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正. 控件通知消息 ...
- Android实现网络多线程断点续传下载
本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...
- MongoDB基础教程系列--第五篇 MongoDB 映射与限制记录
上一篇提到的 find() 的方法,细心的伙伴会发现查询的结果都是显示了集合中全部的字段,实际应用中,显然是不够用的.那么有没有办法指定特定的字段显示出文档呢?答案是肯定的,MongoDB 中用映射实 ...
- 用pl/sql游标实现约瑟夫环
什么是约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数, ...
- XML文档结构
<?xml version="1.0" encoding="UTF-8"?> <books> <bool id="bk1 ...
- java小题:福尔摩斯的约会
原题地址:https://www.nowcoder.com/pat/6/problem/4040 防止广告嫌疑,原题为: 题目描述 大侦探福尔摩斯接到一张奇怪的字条:"我们约会吧! 3485 ...
- mac下安装git,并将本地的项目上传到github
mac下安装git 安装过程: 1.下载Git installer http://git-scm.com/downloads 2.下载之后打开,双击.pkg安装 3.打开终端,使用git --vers ...
- 关于解决配置Tomact过程中出现的相关问题
最近在学习JavaWeb, 但是在第一步的时候就出现问题了, 什么问题呢, 就是关于Tomact的配置. 下面我就详细说明一下我配置过程中出现的问题以及怎么解决的, 希望对大家能有所帮助. 首先,我 ...
- 初学 Java Script (数据类型)
简介:JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.Javascript脚本语言同其他语言一样,有它自 ...
- 读《effective C++》2
条款03:尽可能使用const(Use const whenever possible) 1.const == 奇妙的事 const的一件奇妙的事是,他允许你定义一个约束,(告诉编译器,这是一个“不该 ...