You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Iterator的remove()方法移除ArrayList中所有null值的问题求助

解决Iterator.remove()移除ArrayList中null值的问题

嘿,刚上手Java集合框架的话,踩Iterator的坑真的太正常啦!我来帮你捋捋为啥用Iterator的remove()没成功去掉ArrayList里的null值~

先给你看正确的实现代码

首先,咱们先把能正确移除所有null值的代码写出来,你可以对照自己的代码找找差异:

package setinterface;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class InternalWorkingOfArrayList {
    public static void main(String[] args) {
        // 先准备一个带null的测试集合
        List<Object> list = new ArrayList<>();
        list.add("Hello");
        list.add(null);
        list.add(123);
        list.add(null);
        list.add("Java");

        // 获取Iterator实例
        Iterator<Object> iterator = list.iterator();
        
        // 核心遍历逻辑
        while (iterator.hasNext()) {
            Object element = iterator.next(); // 必须先调用next()获取元素
            if (element == null) { // 判断元素是否为null(注意不能用equals(null),会抛NPE)
                iterator.remove(); // 用Iterator的remove()移除当前元素
            }
        }

        // 输出验证结果
        System.out.println("移除null后的集合:" + list);
    }
}

你大概率踩了这些坑之一

结合新手常犯的错误,我猜你的代码可能有以下问题:

  • 错误1:调用remove()前没调用next()
    Iterator的remove()方法是移除上一次调用next()返回的元素,如果直接调用remove(),会抛出IllegalStateException,根本执行不了移除操作。

  • 错误2:用了集合本身的remove()而非Iterator的remove()
    如果你在遍历过程中写了list.remove(null),哪怕是用Iterator遍历,也会触发ConcurrentModificationException,导致遍历中断或者结果异常。必须用Iterator自己的remove()方法,它会同步更新Iterator和集合的状态。

  • 错误3:判断null的方式错了
    如果你写了element.equals(null)来判断,这会直接抛出NullPointerException(因为null不能调用equals方法),正确的写法是element == null。

额外的注意事项

敲黑板!用Iterator的remove()还有两个关键点要记住:

  • 每次调用remove()之前必须先调用一次next(),不能连续调用两次remove(),否则同样会抛出异常。
  • 不要在遍历过程中修改集合(比如add、remove元素),除非用Iterator提供的方法,否则都会破坏遍历的一致性。

内容的提问来源于stack exchange,提问作者jagdish khetre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:32:11