我知道通过索引遍历LinkedList
是不好的,因为list.get(n)是在线性时间O(n)中执行的。因此,我不应该使用索引。我看了AbstactList.Itr
调用返回的iterator()
,它也使用了get(cursor)
。我很困惑。
正如@axtavt指出的那样,LinkedList.iterator()
实际上调用listIterator()
,该AbstactList.ListItr
返回扩展了AbstactList.Itr
的ListIterator
,并且仅添加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/