list.iterator()可以返回null吗?

时间:2016-06-16 09:55:04

标签: java list data-structures iterator listiterator

Interface List的迭代器方法是否可以返回null?

我注意到很多时候人们为list.iterator添加空检查。我们真的需要这张支票。

Javadocs没有提到迭代器返回null,所以想要确认。

link:https://docs.oracle.com/javase/7/docs/api/java/util/List.html#iterator()

2 个答案:

答案 0 :(得分:8)

List是一个界面。 List.iterator()是否可以返回null取决于您正在使用的接口List的实现。

java.util.ArrayListjava.util.LinkedList等标准类的实现永远不会返回null,因此如果您使用这些,则无需检查List.iterator()是否返回{{1} }}

您可以通过查看这些类的源代码来确认这一点,您可以在JDK安装目录的文件null中找到它们。

原则上可能有一个奇怪的接口src.zip实现会返回List,但这很奇怪,而不是开发人员对null的期望。< / p>

答案 1 :(得分:2)

不,list.iterator()不能返回null。它将始终返回类型为Iterable的类的对象(实现Iterable接口)。

即使在源代码中:方法iterator()通过使用new关键字返回新的可迭代对象,因此不存在null的可能性。下面是ArrayList类的iterator()方法的代码:

  /**
     * Returns an iterator over the elements in this list in proper sequence.
     *
     * <p>The returned iterator is <a href="#fail-fast"><i>fail-fast</i></a>.
     *
     * @return an iterator over the elements in this list in proper sequence
     */
    public Iterator<E> iterator() {
        return new Itr();
    }

此处Itr is a inner class defined in ArrayList类本身。 我在JDk源代码中看到了一些List实现,我发现在任何地方都使用new关键字来返回迭代器对象,所以我认为不需要对list.iterator()进行null检查。

即使我在IntelliJ IDE中尝试了下面的代码,然后我在IDE信息中发现:“Condition 'iterator != null' is always 'true'

      List<String> list = new ArrayList<>();
      Iterator<String> iterator = list.iterator();
      if(iterator != null) {
         System.out.println("");
      }