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

HashMap 遍歷陷阱:兩次 iter.next() 導致數據丟失

     編輯:程式設計疑難解答

問題代碼

String c = (String) iter.next();
Integer a = (Integer) map.get((String) iter.next()); // 錯誤:調用了兩次 next()

錯誤原因

Iterator.next() 會移動游標並返回當前元素。連續調用兩次會跳過一個鍵,導致:

  • 第一個鍵 c 獲取但未處理值。
  • 第二個鍵作為 map.get() 參數,取的是下一個鍵的值。
  • 循環提前結束,漏掉最後一個元素。

正確寫法

while (iter.hasNext()) {
    String key = (String) iter.next(); // 每次循環僅調用一次 next()
    Integer value = (Integer) map.get(key);
    System.out.println("name:" + key + " number:" + value);
}

或使用增強 for(Java 5+):

for (Map.Entry entry : map.entrySet()) {
    System.out.println("name:" + entry.getKey() + " number:" + entry.getValue());
}

核心原則

每次 hasNext() 判斷對應一次 next() 調用,切勿在循環體內多次調用 next()。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved