首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java for 循環刪除集合元素的常見陷阱與正確做法

     編輯:Java 相關知識

問題現象

使用 for (int i = 0; i < list.size(); i++) 遍歷並刪除 List 元素時,往往發現並非所有元素都被刪除。例如:

List list = new LinkedList<>();
list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e");
for (int i = 0; i < list.size(); i++) {
    list.remove(i);
}
System.out.println("剩餘元素個數:" + list.size()); // 輸出 2,而非預期的 0

原因分析

刪除元素後,後續元素索引前移,而循環變量 i 仍遞增,導致跳過本應刪除的元素。實際刪除的是索引 0、2、4(即 a、c、e),b、d 倖存。

解決方案

方法一:逆向循環

for (int i = list.size() - 1; i >= 0; i--) {
    list.remove(i);
}

方法二:調整索引(i--)

for (int i = 0; i < list.size(); i++) {
    list.remove(i);
    i--; // 抵消索引前移
}

方法三:使用 Iterator(推薦)

Iterator it = list.iterator();
while (it.hasNext()) {
    it.next();
    it.remove(); // 安全刪除
}

方法四:Java 8+ removeIf

list.removeIf(e -> true); // 刪除所有

最佳實踐建議

  • 優先使用 Iterator 或 removeIf,代碼清晰且線程安全(單線程下)。
  • 若需索引控制,逆向循環最簡潔高效。
  • 避免在正向 for 循環中直接刪除當前索引元素。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved