如果在循环的过程中调用集合的remove()方法,就会导致循环出错,因为循环过程中list.size()的大小变化了,就导致了错误。 所以,如果想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态 List<PortalWModule> list= new ArrayList<PortalWModule>(); list= proMenuService.getFristMenu(loginUser.getEmpId(),arr[i]); if("2".equals(arr[i])){ //如果是运维子系统,将对其参数设置中(是否展示的)菜单进行过滤 Iterator<PortalWModule> it=list.iterator(); while(it.hasNext()){ PortalWModule portalWModule=it.next(); Map<String, Object> menuSettings = proMenuService.getMenuSettings(); //查找菜单参数设置中需要隐藏的菜单 if(menuSettings!=null){ if("N".equals(menuSettings.get("MENU_STATUS"))){ String[] moduleIds = menuSettings.get("MODULE_ID").toString().split(","); for (String moduleId : moduleIds) { if(moduleId.equals(String.valueOf(portalWModule.getModuleId()))){ it.remove(); } } } } } }