以前寫遍歷是:
//遍歷數(shù)組 for(int i = 0; i < array.length; i ++) ...{ int n = array[i]; //do something } //遍歷集合 for(Interator iter = list.iterator(); iter.hasNext(); ) ...{ Object o = iter.next(); //do something } 現(xiàn)在使用增強(qiáng)型的: 遍歷數(shù)組: //以前我們這樣寫: void someFunction () ...{ int[] array = ...{1,2,5,8,9}; int total = 0; for (int i = 0; i < array.length; i++) ...{ total += array[i]; } System.out.println(total); } //現(xiàn)在我們只需這樣寫(和以上寫法是等價(jià)的): void someFunction () ...{ int[] array = ...{1,2,5,8,9}; int total = 0; for (int n : array) ...{ total += n; } System.out.println(total); } 這種寫法的缺點(diǎn): 顯而易見,,for/in(for each)循環(huán)自動(dòng)控制一次遍歷數(shù)組中的每一個(gè)元素,,然后將它賦值給一個(gè)臨時(shí)變量(如上述代碼中的int n),然后在循環(huán)體中可直接對(duì)此臨時(shí)變量進(jìn)行操作,。這種循環(huán)的缺點(diǎn)是: 1. 只能順次遍歷所有元素,,無法實(shí)現(xiàn)較為復(fù)雜的循環(huán),如在某些條件下需要后退到之前遍歷過的某個(gè)元素,; 2. 循環(huán)變量(i)不可見,,如想知道當(dāng)前遍歷到數(shù)組的第幾個(gè)元素。 遍歷集合: //以前我們這樣寫: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Iterator iter = list.iterator(); iter.hasNext();) ...{ String temp= (String) iter.next(); s += temp; } System.out.println(s); } //現(xiàn)在我們這樣寫: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Object o : list) ...{ String temp = (String) o; s += temp; } System.out.println(s); } // 如果結(jié)合“泛型”,,那么寫法會(huì)更簡(jiǎn)單,,如下: void someFunction () ...{ List<String> list = new ArrayList<String>(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (String temp : list) ...{ s += temp; //省去了對(duì)強(qiáng)制類型轉(zhuǎn)換步驟 } System.out.println(s); } //上述代碼會(huì)被編譯器轉(zhuǎn)化為: void someFunction () ...{ List<String> list = new ArrayList<String>(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) ...{ String temp = iter.next(); s += temp; } System.out.println(s); } 這種寫法的缺點(diǎn): 雖然對(duì)集合進(jìn)行的for/in操作會(huì)被編譯器轉(zhuǎn)化為Iterator操作,但是使用for/in時(shí),,Iterator是不可見的,,所以如果需要調(diào)用Iterator.remove()方法,或其他一些操作,, for/in循環(huán)就有些力不從心了,。 |
|