加强型for循环

JDK1.5加入的增强for和循环.

语法是:

  1. for(ElementType element:arrayName){};

举个例子:(1)

  1. int[] numArray = { 1, 2, 3, 4, 5, 6 };
  2. for (int i : numArray) {
  3. System.out.print(i);
  4. }

//结果会是123456

等价于(2)

  1. int[] numArray = { 1, 2, 3, 4, 5, 6 };
  2. for (int i=0; i < numArray.length; i++) {
  3. System.out.print(numArray[i]);
  4. }

或者更贴切是这样的:(3)

  1. int[] numArray = { 1, 2, 3, 4, 5, 6 };
  2. for (int i=0; i < numArray.length; i++) {
  3. int j = numArray[i];// 这个j,就等价与(1)中的i
  4. System.out.println(j);
  5. }

这个结合集合的概念和同样是JDK1.5加入的泛性,可以做到简化代码的作用.比如

  1. List<Integer> intList = new ArrayList<Integer>();
  2. for (Integer i : intList) {
  3. System.out.print(i);// 可以打印出intList中的所有元素
  4. }

增强for(part1:part2){part3};

part2中是一个数组对象,或者是带有泛性的集合.

part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的.

part3当然还是循环体.

J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。

  在Java程序中,要“逐一处理”——或者说,“遍历”——某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其它循环常用得多)。

  对于遍历数组,这个循环一般是采取这样的写法:

清单1:遍历数组的传统方式

  

  int[] integers = {1, 2, 3, 4};

  

  for (int j = 0; j < integers.length; j++) {

  int i = integers[j];

  System.out.println(i);

  }

  而对于遍历Collection对象,这个循环则通常是采用这样的形式:

清单2:遍历Collection对象的传统方式

  

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  

  for (Iterator itr = stringList.iterator(); itr.hasNext();) {

  Object str = itr.next();

  System.out.println(str);

  }

  而在Java语言的最新版本——J2SE
1.5中,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。

  1. 第二种for循环

  不严格的说,Java的第二种for循环基本是这样的格式:

  for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

  借助这种语法,遍历一个数组的操作就可以采取这样的写法:

清单3:遍历数组的简单方式

  

  int[] integers = {1, 2, 3, 4};

  

  for (int i : integers) {

  System.out.println(i);

  }

  这里所用的for循环,会在编译期间被看成是这样的形式:

清单4:遍历数组的简单方式的等价代码

  

  int[] integers = {1, 2, 3, 4};

  

  for (int 变量名甲 = 0; 变量名甲 < integers.length; 变量名甲++) {

  System.out.println(变量名甲);

  }

  这里的“变量名甲”是一个由编译器自动生成的不会造成混乱的名字。

  而遍历一个Collection的操作也就可以采用这样的写法:

清单5:遍历Collection的简单方式

  

  String[] strings = {"A", "B", "C", "D"};

  Collection list = java.util.Arrays.asList(strings);

  

  for (Object str : list) {

  System.out.println(str);

  }

  这里所用的for循环,则会在编译期间被看成是这样的形式:清单6:遍历Collection的简单方式的等价代码 

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  

  for (Iterator 变量名乙 = list.iterator(); 变量名乙.hasNext();) {

  System.out.println(变量名乙.next());

  }

  这里的“变量名乙”也是一个由编译器自动生成的不会造成混乱的名字。

  因为在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,所以不必担心出现性能方面的问题。

上网查了下,增强型for循环是Java1.5的新特性。所谓“增强型的for 循环”,主要也是针对容器的。使用该项特性时,开发者可以将“利用iterator 遍历容器”的逻辑交给编译器来处理。

例如一个旧的例子:

String name[]={"张三","李四","王五"};

for(int i=0;i<name.length;i++){

System.out.println(name[i]);

}

使用增强型的for循环可以这样写:

String name[]={"张三","李四","王五"};

for(String str:name){

System.out.println(str);

}

遍历二维数组也可以啊,要这样写:

String name[][]={{"张三","李四","王五"},{"张六","李七","王八"},{"张九","李十","王十一"}};

for(String str1:name){

for(String str2:str1){

System.out.println(str2);

}

}

实际上,这一项特性应该普遍地与泛型结合,以获得最大的利益。看看我们以前是怎么遍历集合类的,一个简单的例子:

ArrayList<String> arrayList=ArrayList<String>();

for(int i=0;i<10;i++){

arrayList.add("myBook"+i);

}

for(int i=0;i<arrayList.size();i++){

System.out.println(arrayList[i]);

}

使用增强型for循环后就可以这样写了(跟上边的差不多啦):

ArrayList<String> arrayList=ArrayList<String>();

for(int i=0;i<10;i++){

arrayList.add("myBook"+i);

}

for(String str:arrayList)[

System.out.println(str);

}

For-Each循环也叫增强型的for循环,或者叫foreach循环。

  For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

  For-Each循环的加入简化了集合的遍历。

其语法如下:

  for(type element: array)

  {

        System.out.println(element);

  }

例子

  其基本使用可以直接看代码:

  代码中首先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。

  

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ForeachTest
{
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4, 5};

        System.out.println("----------旧方式遍历------------");
        //旧式方式
        for(int i=0; i<arr.length; i++)
        {
            System.out.println(arr[i]);
        }

        System.out.println("---------新方式遍历-------------");

        //新式写法,增强的for循环
        for(int element:arr)
        {
            System.out.println(element);
        }

        System.out.println("---------遍历二维数组-------------");

        //遍历二维数组

        int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ;

        for(int[] row : arr2)
        {
            for(int element : row)
            {
                System.out.println(element);
            }
        }

        //以三种方式遍历集合List

        List<String> list = new ArrayList<String>();

        list.add("a");
        list.add("b");
        list.add("c");

        System.out.println("----------方式1-----------");
        //第一种方式,普通for循环
        for(int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));

        }

        System.out.println("----------方式2-----------");
        //第二种方式,使用迭代器
        for(Iterator<String> iter = list.iterator(); iter.hasNext();)
        {
            System.out.println(iter.next());
        }
        System.out.println("----------方式3-----------");
        //第三种方式,使用增强型的for循环
        for(String str: list)
        {
            System.out.println(str);

        }
    }

}

  For-Each循环的缺点:丢掉了索引信息。

  当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

时间: 2024-07-30 09:14:18

加强型for循环的相关文章

关于循环语法

循环包括 1 . while(){ ++; } while循环,需要 先进行判断,才能执行.(注:添加++,结束循环) 例:输100次 int i = 0;  while(i<100){   System.out.println("第"+i+"次!!");   i++;  } 2. do{ }while(); do while循环,不管条件是否成立,总会执行一次,也是与while循环的区别.(注:添加++,结束循环) 例:  int i=2;  do{  Sy

集合中的 for-Each循环

 数组的加强型的for-Each循环很简单,我们再来看一下集合中的for-Each 循环又是怎么样的.我们都知道集合中的遍历都是通过迭代(iterator)完成的.也许有人说,也可以按照下面的方式来遍历集合,不一定非要使用迭代: 1 List<String> list = new LinkedList<String>(); 2 list.add("a"); 3 list.add("b"); 4 list.add("c");

微信小程序学习总结(2)------- 之for循环,绑定点击事件

最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习. 先说一下此次项目本人体会较深的几个关键点:微信地图.用户静默授权.用户弹窗授权.微信充值等等. 言归正传,今天分享我遇到的关于wx:for循环绑定数据的一个tips:  1. 想必大家的都知道wx:for,如下就不用我啰嗦了: <view class="myNew" wx:for="{{list}}">{{item.title}}<view

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

C语言for循环的一些注意细节

在使用for循环接收处理数组的时候,有时候要回到数组的首位置.以前没有注意这个问题,以为循环变量置0就可以,实际不是这样的.先来看一下for循环的反汇编代码,如下: Unit1.cpp.595: for(int i=0;i<3;i++)   00402938 33C0             xor eax,eax   0040293A 8945F4           mov [ebp-0x0c],eax   Unit1.cpp.597: i = 0;   0040293D 33D2     

python基础之条件循环语句

前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python interprets non-zero values as True. None and 0 are interpreted as False. Python 判断非0的值为 True, 而None和0被认为是 False.注意这里的True和False首字母大写,Py

JS循环

JS循环基础知识 [循环结构的执行步骤] 1,声明循环变量: 2,判断循环条件: 3,执行循环体操作: 4,更新循环变量: 然后,循环执行2-4,直到条件不成立时,跳出循环: while循环()中的表达式,运算结果可以是各种类型.但是最终都会转化为真假,转换规则同if结构: ①boolean:true为真,flase为假: ②string:空字符串为假,所有非空字符串为真: ③number:0为假,一切非0数字为真: ④null,undefined,NaN全为假: ⑤object:全为真: wh

shell脚本for循环

Shell循环:for 循环次数是固定的 ===================== Shell: for  变量名  [in  取值列表] do 循环体 done C语言: for((初值;条件;步长)) do 循环体 done ===================== Shell循环:while  until 循环次数不一定是固定的 可以固定 可以不固定 while语句: while  条件测试 do 循环体 done 功能:当条件测试成立(条件测试为真),执行循环体. =========

WordPress主循环(The Loop)函数have_posts(),the_post()详解

WordPress中调用文章标题是the_title();调用文章内容时用到the_content();调用文章的作者时用到the_author();等等这些函数,都需要在主循环中使用,下面就介绍一下如何用have_posts()和the_post()开始Wordpress文章中循环,并说明如何结束循环. 语法 1 <?php if (have_posts()) :  while (have_posts()) : the_post(); ?> 2 当找到文章时返回此语句 3 <?php