* 普通for循环遍历删除元素 */List<Student>students=this.getStudents();for(int i=0;i<students.size();i++){if(students.get(i).getId()%3==0){Student student=students.get(i);students.remove(student);}} 由于在循环中删除元素后,list的索引会自动变化,list.size()获取到的list长度也会实时更新,...
Iterator<String> iterator = list.iterator();while(iterator.hasNext()) {if(iterator.next().contains("a")) {// 删除元素iterator.remove(); } } System.out.println(list); } 输出结果为 [] 错误答案1:普通for循环(for-i) publicstaticvoidmain(String[] args){ List<String> list =newArrayList<>...
@DisplayName("基础for循环中删除元素测试") void testBasicForLoop() { for (int i = 0; i < list.size(); i++) { if (Objects.equals(list.get(i), 2)) { // IDEA警告:Suspicious 'List.remove()' in the loop list.remove(i); } } System.out.println(list); // [1, 3, 4] Asser...
虽然最后,list中的元素[2]确实被删除掉了,但是,在循环中的打印结果不对,少打印了[3]。 思考了下,知道了原因,当符合条件,删除元素[2]之后,后面的元素全部往前移,于是[3, 4, 5]向前移动,那么元素[3]的索引,就变成了之前[2]的索引(现在[3]的下标索引变为1了),后面的元素以此类推。可是,下一次for循环的...
为了避免在 for 循环中删除 List 集合元素的问题,我们可以采取以下几种方法:方法一:使用迭代器来遍历 List 集合 由于使用 for-each 循环遍历 List 集合时会出现迭代器和元素索引之间的冲突,因此我们可以使用迭代器来遍历 List 集合。在这种情况下,我们可以使用迭代器的 remove() 方法来删除 List 集合中的元素...
list.remove(ll); }} 复制代码 如上代码,当我们使用foreach的时候我们需要remove的是一个对象,而不是for时的下标,这里会报错java.util.ConcurrentModificationException,这就是我们说的报错了,我先把结果说了吧,这里我们删除元素的话其实并不会报错,报错的是for循环哪里,在你remove后下一次遍历的时候才会报错,报异...
干货点:最近review同事代码的时候发现了一个问题,在ArrayList中边遍历边删除多个元素,在提醒同事后就想着写篇文章从源码角度详细聊聊这个问题好了,当然了我也发现很多人其实都不知道这个报错的原理是什么,如果你也不知道,那确实该好好看这篇文章了。 前几天review同事代码的时候发现对方提交了一份list中边遍历边删除的...
for(int i = list.size - 1; i > 0; i--) { String str = list.get(i); if(str.startsWith("李")) { list.remove(i); } } System.out.println(list); } 输出结果: [张三, 周一, 刘四] 结果输出正常,这种删除方式就算把 list.size 提出变量也是 OK 的,因为循环中只用到了一次。
普通for循环遍历List集合的同时,删除List中的元素是可以运行的代码,但在大多数场景下,不能使用这种方式,上边的结果也印证了这一点,虽然你的代码不会报错,运行也正常,但在本实例中,这么写就是BUG。 BUG原因:索引为i的元素删除后,后边元素的索引自动向前补位,即原来索引为i+1的元素,变为了索引为i的元素,但是下...
首先说结论:无论什么场景,都不要对List使用for循环的同时,删除List集合元素,因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器(Iterator),代码如下: List<String>list=newArrayList<>();Iterator<String>iterator=list.iterator();while(iterator.hasN...