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不支持在循环中添加删除操作,因为在使用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循环更为灵活。

  

时间: 2024-10-26 18:30:31

foreach(增强for循环)和for的区别的相关文章

jdk1.5出现的新特性----&gt;增强for循环

package cn.itcast.jdk15; import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Set; /*jdk1.5出现的新特性---->增强for循环 增强for循环的作用: 简化迭代器的书写格式.(注意:增强for循环的底层还是使用了迭代器遍历.) 增强for循环的适用范围: 如果是实现了Iterable接

增强for循环和迭代器

package example6; import java.util.ArrayList;import java.util.Iterator;import java.util.List; class foreach{/*增强for循环 * 1.语法   for(遍历出来的值:要遍历的集合){} * 运用场景:数组;实现Iterable接口可以使用增强for循环 * 在集合上使用增强for循环遍历 * list,set 都实现了Iterable接口,所以可以使用增强for循环 * map没有实现I

For-Each循环~增强for循环

某人问我增强for循环是什么,其实我只是会用,所以上网查了一下,如下: For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如泛型.自动装箱等). For-Each循环的加入简化了集合的遍历. 其语法如下: for(type 变量名: array) {       System.out.println(变量名); } 例子 其基本使用可以直接看代码: 代码中首先对比了两种for循环:之后实现了用增强

java基础40 增强for循环(也叫foreach循环)

增强for循环是jdk1.5出现的新功能 1.增强for循环的作用 简化了迭代器的书写格式(注意:增强for循环底层还是使用了迭代器遍历) 2.增强for循环的格式 for(数据类型 变量名:遍历的目标){ } 3.增强for循环的适用范围 如果实现了 Iterable 接口或者数组对象都可以使用增强for循环 1 package com.dhb.pattern; 2 3 import java.util.Iterator; 4 5 /** 6 * @author DSHORE / 2018-6

Java 中的foreach(增强for循环)

foreach概述 增强for循环:底层使用的是送代器,使用for循环的格式,简化了送代器的书写,foreach是JDK1.5之后出现的新特性 使用增强for循环 遍历集合 /** * 遍历集合 * @param arrayList 集合 */ public static void demoCollection(ArrayList<String> arrayList) { for (String string: arrayList) { System.out.println(string);

java关于集合的遍历与增强for循环(foreach)的使用

java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合中的元素,并做相应的处理. 下面对各种类型的集合的遍历做一些总结,关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 关于List与Set类型集合的遍历: 1 import

Java Iterator和增强for循环 for each详解

Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器 Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了. for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元素而不用考虑集合下标. 综合实例: package net.csdn.shf4715; impor

增强for循环

http://m.blog.csdn.net/article/details?id=53743016 //String 数据的类型 //name 每次循环后将数据放入名为name的变量中 //names 被循环的数组或集合 foreach(String name : names){ syso(name); } for循环中的循环条件中的变量只求一次值!具体看最后的图片 ?foreach语句是java5新增,在遍历数组.集合的时候,foreach拥有不错的性能. ?foreach是for语句的简化

(14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型

Jdk1.5新特性之静态导入 jdk1.5新特性值静态导入 静态导入的作用:简化缩写 静态导入的作用:可以作用一个类的所有静态成员. 静态导入的格式:import static 包名.类名.静态的成员 import static java.util.Collections.sort; //静态导入指定的某个静态成员方法 import static java.util.Collections.*;  导入所有的静态成员 除了可以导入静态的成员方法,也可以静态的导入成员变量,比如System.out