首页技术文章正文

为什么要使用foreach循环?它有哪些优点和局限性?

更新时间:2021-04-01 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif


虽然Iterator可以用来遍历集合中的元素,但写法上比较烦琐,为了简化书写,从JDK5开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素,具体语法格式如下:

for(容器中元素类型临时变量:容器变量){

     执行语句
}


从面的格式可以看出,与for循环相比,freach 循环不需要获得容器的长度,也不需要根据索引访容器中的元素,但它会自动遍历容器中的每个元素。下面通过一个案例演示foreach循环的用法,如文件6-5所示。

文件Example05.Java

import java.util.*;

public static void main (String[]  args) {

          ArrayList list= new Arravtiotsn ( );       //创建ArrayList集合
 
          list.add ("aaa")                  // 向ArrayList集合中添加字符串元素


          list. add ( "bbb")

          list.add ("CCC");

          for (Object obj : list){          // 使用foreach循环遍历ArravList对象

               System.out.println (obi) :   //取出并打印ArrayList集合中的元素
      }
   }
}


在6-6文件中,第4~7行代码是声明了一一个ArrayList集合并向集合中添加了3个元素;第8行代码使用foreach循环遍历ArrayList集合并打印。可以看出,foreach循环在遍历集合时语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了。foreach循环的次数是由容器中元素的个数决定的,每次循环时,foreach中都通过变量将当前循环的元素记住,从而将集合中的元素分别打印出来。


foreach循环的局限性
foreach循环虽然书写起来很简洁,但在使用时也存在一定的局限性。当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。下面以一个String类型的数组为例,演示foreach循环的局限性,如文件6-6 所示。

文件6-6 Example06.java

public class Example06 {

static String[] strs = {"aaa",, "bbb", "ccc" );

public static void main (String[] args){

//foreach 循环遍历数组

for (string str: strs) {

        str ="ddd";
}


System.out.println ("foreach循环修改后的数组:"+ strs[0] +","+

rs[1]+","+strs[2]);

for循环遍历数组



For(int  i = 0;i< strs.length; 1++) {



strs[i] = "ddd";

}


System.out.printin ("普通for循环修改后的数组:"+ strs[0] +"," +


strs[i]

"+strs[2]) ;


}


文件6-6的中,分别使用foreach循环和普通for循环去修改数组中的元素。从图6-12中的运行结果可在文件6-6循环并不能修改数组中元素的值。原因是第6行代码中的str="ddd"只是将临时变量str指向了一个新的字符串,这与数组中的元素没有一点关系。而在普通for循环中,是可以通过索引的方式来引用数组中的元素并对其值进行修改的。

[案例1]  库存管理系统

像商城和超市这样的地方,都需要有自己的库房,并且库房商品的库存变化应有专人记录,这样才能保证商城和超市正常运转。

”区编写一个程序,模拟库存管理系统。该系统主要包括系统首页、商品入库功能、商品显示和删除商品功能。系统首页及每个功能的具体要求如下。

(1)系统首页:用于显示系统所有的操作,并且可以选择使用某一一个功能。

(2)商品人库功能:首先提示是否要录人商品,根据用户输人的信息判断是否需要录人商品。如果需要录人商品,则需要用户输人商品的名称、颜色、价格和数量等信息。录入完成后,提示商品录人成工并打印所有商品。如果不需要录入商品,则返回系统首页。

(3)商品显示功能:用户选择商品显示功能后,在控制台打印仓库所有商品信息。

(4)删除商品功能:用户选择删除商品功能后,根据用户输人的商品编号删除商品,并在控制台打印除后的所有商品。

注意:本案例要求使用Cllection集合存储自定义的对象,并用迭代器、增强for循环遍历集合。

[案例2]  学生管理系统

在所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写个学生管理系统, 实现对学生信息的添加、删除、修改和查询功能。系统首页及每个功能的具体要求如下。

(1)系统首页:用于显示系统所有的操作,并根据用户在控制台的输人选择需要使用的功能。

(2) 查询功能:用户选择该功能后,在控制台打印所有学生的信息。

(3)添加功能:用户选择该功能后,要求用户在控制台输人学生学号、姓名、年龄和居住地的基本信息。在输人学导时,判断学号是否被占用,如果被占用则添加失败,并给出相应的提示:反之则提示添加成功。

(4)删除功能:用户选择该功能后,提示用户在控制台输人需要删除学生的学号,如果用户输人的学号存在则提示删除成功,反之则提示删除失败。

(5)修政能:用户选择该功能后,提示用户在控制台输人需要修改的学生学号、姓名年龄利居住地学生价息、并使用输人的学生学号判断是否有此人,如果有则修改原有的学生信息,反之则提乐需要核成的,学生信息不存在。

(6)退出功能:用户选择该功能后,程序正常关闭。

注意:本案例要求使用List集合存储自定义的对象,使用List集合中的常用方法实现相关的操作。





猜你喜欢:

怎样在hadoop虚拟机上安装和配置JDK?

JDK环境变量配置win10视频教程【黑马程序员】

JDK8有哪些新特性?[视频介绍]    

黑马程序员java培训

分享到:
在线咨询 我要报名
和我们在线交谈!