1. 程式人生 > >java 中,for、for-each、iterator 區別

java 中,for、for-each、iterator 區別

  • java 中,for、for-each、iterator 區別:
  1. 無論是在陣列中還是在集合中,for-Each加強型for迴圈都是它們各自的普通for迴圈的一種“簡寫方式”,即兩者意思上是等價的,但前者方便簡單,建議多使用。
  2. for-Each迴圈不能完全代替普通for迴圈,因為for-Each有一定的侷限性。
  3. for-Each迴圈只能用於 陣列、Iterable型別(包括集合)。
  4. 集合中的for-Each迴圈本質上使用了Ierator迭代器,所以要注意Itrator迭代陷阱(單執行緒和多執行緒都有問題)。
  • java 中,陣列沒有 iterator 用法

  • 在陣列中,for-Each 迴圈能否完全替代普通for迴圈?
    答案是不能。
    雖然for-Each 寫起來方便,但也有以下幾個侷限性:
  1. 只能對元素進行順序的訪問;
  2. 只能訪問陣列或集合中的所有元素;
  3. 迴圈中沒有當前的索引,無法對指定的元素操作。如更換當前索引位置的元素。
  • 集合迭代的陷阱  
    集合迴圈遍歷時所使用的迭代器Iterator有一個要求:在迭代的過程中,除了使用迭代器(如:Iterator.remove()方法)對集合增刪元素外,是不允許直接對集合進行增刪操作。否則將會丟擲 ConcurrentModificationException異常。
    所以,由於集合的for-Each迴圈本質上使用的還是Iterator來迭代,因此也要注意這個陷阱。
    for-Each迴圈很隱蔽地使用了Iterator,導致程式設計師很容易忽略掉這個細節,所以一定要注意。

  • 出處:https://juejin.im/post/5adfc617f265da0b873a26d5