文档章节

foreach(增强for循环)和for的区别

architect刘源源
 architect刘源源
发布于 06/05 21:10
字数 723
阅读 30
收藏 3

foreach(增强for循环)和for的区别

 

  首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版。

  再说一下foreach的书写格式:

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

      语句

     }

  foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。

  我们看看下面的例子:

复制代码

1 public static void main(String[] args) {
 2         List<String> arr = new ArrayList<String>();
 3         arr.add("你好");
 4         arr.add("我好");
 5         arr.add("大家好");
 6         
 7         //foreach循环
 8         for(String str : arr){                      //这里的str就是为了获取每次循环的arr中的值
 9             System.out.println(str);               //就相当于 String str=arr[i]
10         }
11     }

复制代码

  但是相比较之下我们用for循环输入就略显麻烦

复制代码

public static void main(String[] args) {
        List<String> arr = new ArrayList<String>();
        arr.add("你好");
        arr.add("我好");
        arr.add("大家好");
        
        //for循环
        for(int i=0;i<arr.size();i++){
            System.out.println(arr.get(i));    //要获取list中元素需要用get方法    
        }
    }

复制代码

 

  除了这种普通的集合还可以对像map这种键值对使用

  例如: 

复制代码

public static void main(String[] args) {
        Map<String,String> mapstr = new HashMap<String,String>();
        mapstr.put("王", "男");
        mapstr.put("李", "男");
        mapstr.put("张", "女");
                            //entrySet方法是为了获取键值对的集合
        for(Map.Entry<String, String> s : mapstr.entrySet()){   //这里的Map.Entry<String, String>其实就是一个类型 用来表示键值对的类型
            System.out.println("key="+s.getKey());            //这里其实还是相当于 s=maostr.entrySet,只不过s存储的是键值对。
            System.out.println("value="+s.getValue());        //所以可以用get方法获取出来存储的键值对。
        }
    }

复制代码

 

  另外foreach不支持在循环中添加删除操作,快速失败机制fail-fast机制,因为在使用foreach循环的时候数组(集合)就已经被锁定不能被修改,否则会报出java.util.ConcurrentModificationException异常

  例如:

复制代码

public static void main(String[] args) {
        List<String> arr = new ArrayList<String>();
        arr.add("你好");
        arr.add("我好");
        arr.add("大家好");
        
        //foreach循环
        for(String str : arr){                    
            System.out.println(str);            
            arr.add("1");                    //对arr进行添加    
        }
    }

复制代码

  关于不能添加删除原理以及如何在foreach中添加删除我们下篇再说。

  所以总结如下:

  foreach适用于只是进行集合或数组遍历,for则在较复杂的循环中效率更高。

  foreach不能对数组或集合进行修改(添加删除操作),如果想要修改就要用for循环。

  所以相比较下来for循环更为灵活

© 著作权归作者所有

上一篇: spring框架
下一篇: cookie 和session
architect刘源源

architect刘源源

粉丝 169
博文 564
码字总数 941209
作品 0
浦东
程序员
私信 提问
为什么阿里禁止在 foreach 循环里进行元素的 remove/add 操作

在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考。 1.foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种...

架构师springboot
05/10
72
2
java.lang.Iterable

从jdk1.5 java.lang包增加了这个接口。 实现这个接口允许对象成为 "foreach" 语句的目标,即增强的for循环。 然而此接口中只有一个接口类方法。 /** * Returns an iterator over a set of el...

Qiurf
2016/12/22
105
0
【java】for和foreach的区别

一、概述 普通for循环在遍历集合时使用下标来定位集合中的元素。java在JDK1.5开始支持foreach循环,foreach在一定程度上简化了对集合的遍历。但某些情况下,foreach是不能完全代替for循环的。...

qq_26545305
2017/11/09
0
0
C#语言————第二章 C#语言快速热身

第二章 C#语言快速热身 *一.选择结构** 1:if选择结构与java的if选择结构语法完全相同 2:switch选择结构 ①:常量表达式的值可以是,string char int ②:case表达式的值不能重复 ③:case语...

九之者
2018/11/11
0
0
Java集合源码分析之Iterable概述_一点课堂(多岸学院)

前言 当我们想要遍历集合时,Java为我们提供了多种选择,通常有以下三种写法: 写法1:for循环 写法2:foreach循环 写法3:Iterator 那么以上三种遍历方式有何区别呢?for循环我们很熟悉了,...

程伟鑫
09/10
22
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
4
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
9
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
7
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
8
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部