增強for迴圈和傳統for迴圈有什麼區別

2023-01-03 18:05:58 字數 3305 閱讀 4767

1樓:

3全部增強for迴圈亦為高階for迴圈。

增強for迴圈內部是使用的iterator來遍歷的,只能遍歷陣列和實現了iterable介面的集合。優點是寫法簡便,無需獲得陣列、集合長度,也無需根據索引來訪問元素。缺點是不能在迴圈裡動態的刪除元素和獲取元素下標。

任何的增強for迴圈都可以改寫為普通for迴圈。遍歷集合所有元素的話用增強for迴圈更加簡潔,如果是複雜的迴圈,還是用for迴圈比較好,for迴圈功支援索引取元素,可以使用下標來控制位置。

高階for有乙個侷限性,必須有被遍歷的目標。

建議在遍歷陣列的時候,還是希望使用傳統for,因為傳統for可以定義角標。

凡是支援迭代器的都支援高階for

.而對於 linkedlist 由於獲取乙個元素,要從頭開始向後找,因此建議使用 增強for迴圈,也就是iterator。

下面用乙個例子說明這點:

**一public static void removeevensver2(listlst)

for (integer x : lst)

if (x % 2 == 0)

lst.remove(x);

system.out.println(lst);

public static void removeevensver2(listlst)

**二public static void removeevensver3(listlst)

iteratoritr = lst.iterator();

while (itr.hasnext())

if (itr.next() % 2 == 0)

itr.remove();

system.out.println(lst);

public static void removeevensver3(listlst)

**一在執行時丟擲異常,**二正常

原因分析:因為增強的for迴圈內部就是呼叫iterator實現的,在遍歷的時候就將list轉化為了迭代器,當迭代器被建立之後,如果從結構上對列表修改除非通過迭代器自身的remove、add方法,其他任何時間任何方式的修改,迭代器都會丟擲concurrentmodificationexception異常。

2樓:匿名使用者

增強for迴圈只用於查詢,不能實現改和刪除;

普通迴圈都能做……

不過增強for迴圈**寫起來容易一些

增強for迴圈的本質是定義變數,依次把集合的每個值都依次複製到變數進行操作

但是普通for迴圈一般都是使用集合的原有值進行操作。

j**a中使用增強型的for迴圈有什麼好處?

3樓:匿名使用者

在上面這個例子 增強型的for迴圈 和普通for迴圈一樣增強型的for迴圈 優點主要體現在集合中,隨便舉個例子比如對 set 的遍歷

一般是迭代遍歷:

setset = new hashset();

iteratorit = set.iterator();

while (it.hasnext())

for迴圈遍歷:

for (string str : set)是不是簡單些?

優點還體現在泛型 假如 set中存放的是objectsetset = new hashset();

for迴圈遍歷:

for (object obj: set) else if(obj instanceof string)

........

}如果你用iterator遍歷,那就暈了

map list 也一樣

唯一的缺點就是 在遍歷 集合過程中,不能對集合本身進行操作for (string str : set)

4樓:小童鞋_成

沒什麼好處的,簡單、節省**而已、、、

j**a中的增強for迴圈,是什麼?語法結構和使用得條件?詳細解答就加高分。

5樓:

for(object o:list)

首先object是型別 o是宣告的乙個object的引數   list是從list列表中找出object物件放到o中

是因為有種傳值叫做引用傳值,當list的內容複雜的時候換成引用傳值會提高程式設計效率和**質量!

增強for迴圈有兩個好處:

1.寫起來簡單

2.遍歷集合、容器簡單(都是相對原來for(;;)的這種寫法而言)

6樓:小吏

看一看這個例子吧,你會馬上明白的

public arraylistmerge(string words, string more)

for(string w : words)就是對字串陣列string words中的每個字串元素遍歷

這個for條件裡的string是遍歷的元素的型別,這裡是字串陣列中的元素,型別是string

w是遍歷的元素,就是字串陣列中的每個元素,簡寫成w,簡寫成其他字母也可以

words就是字串陣列string words的名字,是words

7樓:

凡陣列和實現iterable介面的類都可以使用增強for迴圈。當需要對容器內資料進行處理,而不改變容器的長度時,可以使用。for(t t: nt)

j**a的這三種for迴圈有什麼區別?

8樓:匿名使用者

第一種for迴圈遍歷arraylist速度比較快,因為arraylist是快速隨機訪問。但是如果想在回for迴圈中使用list.remove方法就會改變

答list的size,導致迴圈出現問題。

第二種for迴圈就可以忽略下標,對每個元素進行處理。不過要使用list的remove方法還是會出現問題。會觸發fail-fast機制。

第三種iterator迭代器是由各個list類自己實現的,比如arraylist有arraylist自己實現的iterator, vector有vector的iterator,因此也會實現iterator內的remove方法。使用iterator就可以使用remove方法而不用擔心因為改變表或樹的結構而出錯了。另iterator遍歷linkedlist速度比較快,因為linkedlist順序查詢速度快。

9樓:遊戲人間

2,3沒法跟蹤迴圈的次數

1,3沒法直接的得到迴圈的每乙個物件

10樓:匿名使用者

第一種是一般常見的迴圈,第二種是jdk1.5的新功能,其實也是和第一種一樣的只是內部做了一些處理而已,第三中是利用迭代器迴圈,一般遍歷集合。

強制迴圈鍋爐和自然迴圈鍋爐為什麼自然迴圈鍋爐的迴圈倍率高呢?

自然迴圈鍋爐工質依靠上公升管受熱所產生的密度差沿著閉合的路線運動。強制迴圈鍋爐在給水幫浦壓頭作用下,工質順次通過預熱 蒸發 過熱各受熱面,而被預熱 蒸發 過熱到所需的溫度。自然迴圈鍋爐 1 汽包是鍋爐中省煤器 過熱器和蒸發受熱面的分隔容器。有了汽包,給水的加熱 蒸發和過熱等相應的各個受熱面有明顯的分...

for迴圈和while迴圈的區別及用法

區別 1 使用場景不同 知道執行次數的時候一般用for,條件迴圈時一般用while。2 兩種迴圈在構造死迴圈時的區別 while迴圈裡的條件被看成表示式,因此,當用while構造死迴圈時,裡面的true實際上被看成永遠為真的表示式,這種情況容易產生混淆,有些工具軟體如pc lint就會認為出錯了,因...

for迴圈中怎樣跳出本次迴圈進入下次迴圈

for迴圈中跳出本次迴圈進入下次迴圈方法 在希望跳過本次迴圈剩餘語句版的地方,加上continue 擴充套件資料權 for迴圈是程式語言中一種迴圈語句,而迴圈語句由迴圈體及迴圈的判定條件兩部分組成,其表示式為 for 單次表示式 條件表示式 末尾迴圈體 語句最簡形式為 for 一般形式為 for 單...