Java中list集合遍歷途中不能remove,但可以使用迭代器來刪除


 簡單點來說,在遍歷途中是不能使用remove的

for (SysMenu menu : sysMenuList) {
        if (menu.getId() == 1){
        sysMenuList.remove(menu);  //這樣使用是錯誤的
     }
}

上面的代碼是錯的,因為使用remove把其中的一個實體移除了,整個list就變了,正在遍歷的list突然就少了一條,怎么會不報錯呢?

這種問題就類似於:你要批量添加一些數據,先把它們裝到一個list中,在list集合遍歷途中去數據庫查這些要添加

進去的數據,壓根還沒添加進去,怎么會查的到嘛.

要想做到上面代碼理想中的操作,可以使用迭代器的remove,代碼如下:

 //遍歷刪除,除去一級子菜單
 Iterator<SysMenu> iterator = sysMenuList.iterator();
 while (iterator.hasNext()) {
    SysMenu menu = iterator.next();
  if (menu.getParentId() != null && menu.getParentId() != 0) {
         iterator.remove();//使用迭代器的刪除方法刪除
   }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM