for (int i = 0; i < list.size(); i++) {
if (list.get(i).getSno().equals(sno)) {
list.remove(i); // 刪除後後續元素前移,i++ 導致跳過下一個
}
}
刪除第 0 項後,原第 1 項變為第 0 項,迴圈 `i` 變 1 → **漏檢新第 0 項**。連續刪除更嚴重。
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i).getSno().equals(sno)) {
list.remove(i);
}
}
Iterator it = list.iterator();
while (it.hasNext()) {
if (it.next().getSno().equals(sno)) {
it.remove(); // 唯一安全在迭代中修改 List 的方式
}
}
list = list.stream()
.filter(s -> !s.getSno().equals(sno))
.collect(Collectors.toList());
第一個迴圈刪除,**但 `i++` 導致漏檢**;第二個迴圈在**已縮減的 List** 上遍歷,看似正常,實則資料已損壞(漏刪/漏存)。
**遍歷中刪除 List 元素:反向 `for`、Iterator.remove、Stream filter 三選一**。正向 `for` + `remove(i)` 是經典 Bug,代碼審查必查項目。