for (int i = 0; i < list.size(); i++) { if (2==equals(list.get(i) )) {//2是要删除的元素 list.remove(i); //解决方案: 加一行代码i = i - 1; 删除元素后,下标减1 } System.out.println("当前List是"+list.toString()); } //原ArrayList是[1, 2, 3, 3, 4] //删除后是...
1、反向遍历(正向遍历删除会导致列表长度的缩小,与索引的逐渐增大现象结合后就会出现相应问题,只要反向使长度缩小和索引同步缩小结合就能避免) List<String> newList =newArrayList<>(deptList);for(int i = newList.size() - 1; i > -1; i--){if(newList.get(i).indexOf("产品") != -1){newList....
1/**2* 普通for循环遍历删除元素3*/4List<Student> students =this.getStudents();5for(inti=0; i<students.size(); i++) {6if(students.get(i).getId()%3 == 0) {7Student student =students.get(i);8students.remove(student);9}10} 由于在循环中删除元素后,list的索引会自动变化,list.size(...
11. list.remove(list.get(i)); 12. System.out.print(" delete"); 13. i--; // 索引改变! 14. } 15. System.out.println(); 16. } 17. } 18. } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 可以看到遍历删除偶数的结果是成功的,但是这种方法由...
原因是:删除某个元素后,list的大小size发生了变化,而list的索引也在变化,索引为i的元素删除后,后边元素的索引自动向前补位,即原来索引为i+1的元素,变为了索引为i的元素,但是下一次循环取的索引是i+1,此时你以为取到的是原来索引为i+1的元素,其实取到是原来索引为i+2的元素,所以会导致你在遍历的...
for (String str : list) { list.remove(str); } 执行抛出异常: Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861) ...
可以看出,每次删除一个元素,都会将modCount的值重新赋值给expectedModCount,这样2个变量就相等了,不会触发java.util.ConcurrentModificationException异常。更多面试题,欢迎关注公众号 Java面试题精选 3. 使用for循环正序遍历 使用for循环正序遍历的实现方式如下所示: public static void main(String[] args) { List<Str...
1.背景:在业务中遍历某个集合时涉及到排除某个属性为0的情况,即遍历时删除。 一、3种错误方式演示三种: 1.foreach List<String>list=newArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");for(String ele:list){if(ele.equals("3")){System.out.println(...
在遍历并操作List或Map时,如删除元素,可能会触发`java.util.ConcurrentModificationException`异常。为解决此问题,可采取以下三种方法:1. 使用迭代器 尽管迭代器方法可以避免上述异常,但需注意,使用`iterator().remove()`方法后,再次调用`iterator().next()`或`iterator().hasNext()`时,同样可能...
//list.remove("b"); it2.remove(); } } 增强型for(JDK1.5新增) for(String string:list){if("b".equals(string)){list.remove("b");}} 总结 普通遍历:通过索引删除元素,但是索引要-- 迭代器遍历:可以删除,必须使用迭代器自身的remove方法,否则会出现并发修改异常 ...