首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java ListIterator 死循環陷阱:添加元素時必須調用 next()

     編輯:程式設計疑難解答

問題代碼

ListIterator it = al.listIterator();
while (it.hasNext()) {
    if (al.size() == 4) {
        it.add("vv");
    }
    // 缺少 it.next(),迭代器永不前進
}

死循環原因

hasNext() 始終返回 true,因為迭代器游標停留在初始位置,未調用 next() 前進。

修正代碼

while (it.hasNext()) {
    if (al.size() == 4) {
        System.out.println(al.size()); // 此時 size 已變 5
        it.add("vv");
    }
    it.next(); // 關鍵:移動游標
}

補充知識點

  1. it.add() 後 al.size() 立即增加,動態反映。
  2. Iterator it = al.listIterator() 面向接口編程,實際對象是 ListIterator,可調用 add。
  3. 直接 al.add() 會導致 ConcurrentModificationException,必須用迭代器的 add/remove。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved