黑马程序员技术交流社区

标题: 关于ForEach的问题 [打印本页]

作者: fenzheng    时间: 2014-3-18 22:04
标题: 关于ForEach的问题
传统for和高级for有什么区别呢?
作者: zhxu188    时间: 2014-3-18 22:35
传统的for没什么可说的,高级for是传统for循环的变种也可以说是简写 只能对数组或者是List这样的集合使用 这个是java 1.5新加入的
作者: SyouRai_Tsk    时间: 2014-3-18 22:41
对于for循环增强,无非也就是数组,List集合,Map集合之间使用,如果学习了这特性可以提高工作效率
package cn.itcast.foreach;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.junit.Test;

public class demo3_3 {

/*
    首先我们来讲数组的循环
*/
    @Test
    public void test1(){
        int arr[]={1,2,3,4,5};
    //这是传统意义上的输出数组中的每个值
       for(int i=0;i<arr.length;i++){
           System.out.println(arr[i]);
        }
   /*而下面是使用我们的for循环增强
    for循环增强的使用语法
    for(1.变量类型 变量 :2.需迭代的数组或集合)
        }
1.是你需要迭代的数组或集合里那个值的变量类型,下面就是int类型
2.是你需要迭代的数组或集合 而下面就是前面定义的arr数组

ps:在此已经说明for循环的使用语法,下面则不再次具体说明使用的语法
*/
        for(int i:arr){
            System.out.println(i);
        }
    }
    @Test
    public void test2(){
        List list=new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        /*
    正常的情况下,集合都会使用Iterator进行迭代,然后使用hasNext和next

*/
        Iterator it=list.iterator();
       while(it.hasNext()){
           int i=(Integer)it.next();
           System.out.println(i);
       }     

        for(Object obj:list){
            System.out.println(obj);
        }
    }
    @Test  //传统的map集合1
    public void test3(){
        Map map=new LinkedHashMap();
        map.put("1", "aaaa");
        map.put("2", "bbbb");
        map.put("3", "cccc");
        map.put("4", "dddd");
      
        Set set=map.keySet();
        Iterator  it=set.iterator();
        while(it.hasNext()){
            String key=(String) it.next();
            String value=(String) map.get(key);
            System.out.println(key + "=" + value);
        }
    }
    @Test  //增强for循环的map集合1
    public void test4(){
        Map map=new LinkedHashMap();
        map.put("1", "aaaa");
        map.put("2", "bbbb");
        map.put("3", "cccc");
        map.put("4", "dddd");
        Set set=map.keySet();
        for(Object obj:set){
            String key=(String) obj;
            String value=(String) map.get(key);
            System.out.println(key + "=" + value);
        }
    }
    @Test
    public void test5(){
        Map map=new LinkedHashMap();
        map.put("1", "aaaa");
        map.put("2", "bbbb");
        map.put("3", "cccc");
        map.put("4", "dddd");
      
        Set set=map.entrySet();
        Iterator it=set.iterator();
        while(it.hasNext()){
            Map.Entry me=(Entry) it.next();
            String keys=(String) me.getKey();
            String value=(String) me.getValue();
            System.out.println(keys + "=" + value);
        }
    }
    @Test
    public void test6(){
        Map map=new LinkedHashMap();
        map.put("1", "aaaa");
        map.put("2", "bbbb");
        map.put("3", "cccc");
        map.put("4", "dddd");
      
        Set set=map.entrySet();
        for(Object obj:set){
            Map.Entry me=(Entry) obj;
            String keys=(String) me.getKey();
            String value=(String) me.getValue();
            System.out.println(keys + "=" + value);
        }
    }
}


传统的for循环可以输出也可以赋值,但是,增强for循环只能用来输出数据,不能进行赋值,上面是增强for的一些小例子,给予参考!
作者: 李猛    时间: 2014-3-18 22:41
高级for循环就是简写了原来的for循环,就拿数组说吧String[ ] str=new String[10]   使用高级for循环会简单的多,for(String  s : str) 循环体写成打印s就行了,这样数组的遍历就变得简单了,   for循环使用语法    for(数组/集合类型  变量名  :  数组名/集合名)   紧接着你得到的变量就是数组或是集合元素
作者: 菜小徐    时间: 2014-3-18 22:47
for和foreach的用法区别for可以不逐个遍历,比如每隔一个遍历一个,也可以从前向后遍历,从后向前,但是foreach不能从后向前遍历,只能从前向后,并且foreach只能逐个遍历。在foreach中不能向迭代变量赋值。
如果只是遍历集合或者数组,用foreach好些,快些。
如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。
作者: 王竞    时间: 2014-3-19 00:46
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
     引用了x的java语句;
}

优点:foreach简化数组和集合的遍历 ,
确定:foreach语句的局限性,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2