首頁(yè)技術(shù)文章正文

為什么要使用foreach循環(huán)?它有哪些優(yōu)點(diǎn)和局限性?

更新時(shí)間:2021-04-01 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif


雖然Iterator可以用來(lái)遍歷集合中的元素,但寫(xiě)法上比較煩瑣,為了簡(jiǎn)化書(shū)寫(xiě),從JDK5開(kāi)始,提供了foreach循環(huán)。foreach循環(huán)是一種更加簡(jiǎn)潔的for循環(huán),也稱增強(qiáng)for循環(huán)。foreach循環(huán)用于遍歷數(shù)組或集合中的元素,具體語(yǔ)法格式如下:

for(容器中元素類型臨時(shí)變量:容器變量){

     執(zhí)行語(yǔ)句
}


從面的格式可以看出,與for循環(huán)相比,freach 循環(huán)不需要獲得容器的長(zhǎng)度,也不需要根據(jù)索引訪容器中的元素,但它會(huì)自動(dòng)遍歷容器中的每個(gè)元素。下面通過(guò)一個(gè)案例演示foreach循環(huán)的用法,如文件6-5所示。

文件Example05.Java

import java.util.*;

public static void main (String[]  args) {

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


          list. add ( "bbb")

          list.add ("CCC");

          for (Object obj : list){          // 使用foreach循環(huán)遍歷ArravList對(duì)象

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


在6-6文件中,第4~7行代碼是聲明了一一個(gè)ArrayList集合并向集合中添加了3個(gè)元素;第8行代碼使用foreach循環(huán)遍歷ArrayList集合并打印。可以看出,foreach循環(huán)在遍歷集合時(shí)語(yǔ)法非常簡(jiǎn)潔,沒(méi)有循環(huán)條件,也沒(méi)有迭代語(yǔ)句,所有這些工作都交給虛擬機(jī)去執(zhí)行了。foreach循環(huán)的次數(shù)是由容器中元素的個(gè)數(shù)決定的,每次循環(huán)時(shí),foreach中都通過(guò)變量將當(dāng)前循環(huán)的元素記住,從而將集合中的元素分別打印出來(lái)。


foreach循環(huán)的局限性
foreach循環(huán)雖然書(shū)寫(xiě)起來(lái)很簡(jiǎn)潔,但在使用時(shí)也存在一定的局限性。當(dāng)使用foreach循環(huán)遍歷集合和數(shù)組時(shí),只能訪問(wèn)集合中的元素,不能對(duì)其中的元素進(jìn)行修改。下面以一個(gè)String類型的數(shù)組為例,演示foreach循環(huán)的局限性,如文件6-6 所示。

文件6-6 Example06.java

public class Example06 {

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

public static void main (String[] args){

//foreach 循環(huán)遍歷數(shù)組

for (string str: strs) {

        str ="ddd";
}


System.out.println ("foreach循環(huán)修改后的數(shù)組:"+ strs[0] +","+

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

for循環(huán)遍歷數(shù)組



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



strs[i] = "ddd";

}


System.out.printin ("普通for循環(huán)修改后的數(shù)組:"+ strs[0] +"," +


strs[i]

"+strs[2]) ;


}


文件6-6的中,分別使用foreach循環(huán)和普通for循環(huán)去修改數(shù)組中的元素。從圖6-12中的運(yùn)行結(jié)果可在文件6-6循環(huán)并不能修改數(shù)組中元素的值。原因是第6行代碼中的str="ddd"只是將臨時(shí)變量str指向了一個(gè)新的字符串,這與數(shù)組中的元素沒(méi)有一點(diǎn)關(guān)系。而在普通for循環(huán)中,是可以通過(guò)索引的方式來(lái)引用數(shù)組中的元素并對(duì)其值進(jìn)行修改的。

[案例1]  庫(kù)存管理系統(tǒng)

像商城和超市這樣的地方,都需要有自己的庫(kù)房,并且?guī)旆可唐返膸?kù)存變化應(yīng)有專人記錄,這樣才能保證商城和超市正常運(yùn)轉(zhuǎn)。

”區(qū)編寫(xiě)一個(gè)程序,模擬庫(kù)存管理系統(tǒng)。該系統(tǒng)主要包括系統(tǒng)首頁(yè)、商品入庫(kù)功能、商品顯示和刪除商品功能。系統(tǒng)首頁(yè)及每個(gè)功能的具體要求如下。

(1)系統(tǒng)首頁(yè):用于顯示系統(tǒng)所有的操作,并且可以選擇使用某一一個(gè)功能。

(2)商品人庫(kù)功能:首先提示是否要錄人商品,根據(jù)用戶輸人的信息判斷是否需要錄人商品。如果需要錄人商品,則需要用戶輸人商品的名稱、顏色、價(jià)格和數(shù)量等信息。錄入完成后,提示商品錄人成工并打印所有商品。如果不需要錄入商品,則返回系統(tǒng)首頁(yè)。

(3)商品顯示功能:用戶選擇商品顯示功能后,在控制臺(tái)打印倉(cāng)庫(kù)所有商品信息。

(4)刪除商品功能:用戶選擇刪除商品功能后,根據(jù)用戶輸人的商品編號(hào)刪除商品,并在控制臺(tái)打印除后的所有商品。

注意:本案例要求使用Cllection集合存儲(chǔ)自定義的對(duì)象,并用迭代器、增強(qiáng)for循環(huán)遍歷集合。

[案例2]  學(xué)生管理系統(tǒng)

在所學(xué)校中,對(duì)學(xué)生人員流動(dòng)的管理是很麻煩的,本案例要求編寫(xiě)個(gè)學(xué)生管理系統(tǒng), 實(shí)現(xiàn)對(duì)學(xué)生信息的添加、刪除、修改和查詢功能。系統(tǒng)首頁(yè)及每個(gè)功能的具體要求如下。

(1)系統(tǒng)首頁(yè):用于顯示系統(tǒng)所有的操作,并根據(jù)用戶在控制臺(tái)的輸人選擇需要使用的功能。

(2) 查詢功能:用戶選擇該功能后,在控制臺(tái)打印所有學(xué)生的信息。

(3)添加功能:用戶選擇該功能后,要求用戶在控制臺(tái)輸人學(xué)生學(xué)號(hào)、姓名、年齡和居住地的基本信息。在輸人學(xué)導(dǎo)時(shí),判斷學(xué)號(hào)是否被占用,如果被占用則添加失敗,并給出相應(yīng)的提示:反之則提示添加成功。

(4)刪除功能:用戶選擇該功能后,提示用戶在控制臺(tái)輸人需要?jiǎng)h除學(xué)生的學(xué)號(hào),如果用戶輸人的學(xué)號(hào)存在則提示刪除成功,反之則提示刪除失敗。

(5)修政能:用戶選擇該功能后,提示用戶在控制臺(tái)輸人需要修改的學(xué)生學(xué)號(hào)、姓名年齡利居住地學(xué)生價(jià)息、并使用輸人的學(xué)生學(xué)號(hào)判斷是否有此人,如果有則修改原有的學(xué)生信息,反之則提樂(lè)需要核成的,學(xué)生信息不存在。

(6)退出功能:用戶選擇該功能后,程序正常關(guān)閉。

注意:本案例要求使用List集合存儲(chǔ)自定義的對(duì)象,使用List集合中的常用方法實(shí)現(xiàn)相關(guān)的操作。





猜你喜歡:

怎樣在hadoop虛擬機(jī)上安裝和配置JDK?

JDK環(huán)境變量配置win10視頻教程【黑馬程序員】

JDK8有哪些新特性?[視頻介紹]    

黑馬程序員java培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!