使用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
相关产品推荐
相关产品推荐

