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();//使用迭代器的删除方法删除
   }
}
原文地址:https://www.cnblogs.com/hegeainiyo/p/13723478.html