我知道通过索引遍历LinkedList是不好的,因为list.get(n)是在线性时间O(n)中执行的。因此,我不应该使用索引。我看了AbstactList.Itr调用返回的iterator(),它也使用了get(cursor)。我很困惑。

正如@axtavt指出的那样,LinkedList.iterator()实际上调用listIterator(),该AbstactList.ListItr返回扩展了AbstactList.ItrListIterator,并且仅添加AbstactList.Itr接口的实现。因此,获取下一个元素的机制与`AbstactList.Itr中的相同。 next();get(n)调用指定列表上的。

最佳答案

LinkedList不仅从AbstractList继承,而且从AbstractSequentialList继承,而iterator()依次实现ListIterator,如下所示:

public Iterator<E> iterator() {
    return listIterator();
}


LinkedList返回的iterator()对于使用顺序访问很聪明。

因此,无论您使用foreach,listIterator()还是,您始终都在处理相同的智能迭代器类型。

关于java - 我应该对LinkedList使用哪种迭代?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7527217/

10-11 22:35
查看更多