Java 列表文档中的混淆点
我不清楚文件中的一点 它说: i) 请注意,这些操作的执行时间可能与 某些实现的索引值(例如LinkedList类) 示例)。Java 列表文档中的混淆点,java,list,collections,arraylist,linked-list,Java,List,Collections,Arraylist,Linked List,我不清楚文件中的一点 它说: i) 请注意,这些操作的执行时间可能与 某些实现的索引值(例如LinkedList类) 示例)。 ii)因此,迭代列表中的元素通常是 如果调用方不知道 实施 请注意,我在报价中加入了(I)和(ii) 第(i)点非常明显,因为我们访问链表的方式与随机访问数组的方式不同 但我无法理解第(二)点。 如果我们不知道实现,那么选择迭代器有什么好处? 我的意思是,如果实现是一个LinkedList,那么与通过索引访问相比,性能有什么不同吗? 我想不会,因为不管怎样,迭代器将操作
ii)因此,迭代列表中的元素通常是 如果调用方不知道 实施 请注意,我在报价中加入了(I)和(ii) 第(i)点非常明显,因为我们访问链表的方式与随机访问数组的方式不同 但我无法理解第(二)点。
如果我们不知道实现,那么选择迭代器有什么好处?
我的意思是,如果实现是一个
LinkedList
,那么与通过索引访问相比,性能有什么不同吗?我想不会,因为不管怎样,
迭代器将操作链接列表。
所以没有区别
那么,文件中第(ii)项建议的含义是什么 否,如果实现是一个LinkedList
,那么迭代器将更加高效-O(n)用于迭代整个列表,而不是O(N2)。由于迭代器由列表提供,因此它可以访问内部数据结构。它可以只保留对“当前节点”的引用,使其成为一个固定时间操作,以到达下一个节点:只需跟随链接
(如果您仍然感到困惑,我建议您只看一下实现——这可能会让它更清楚。)链表的迭代器可以有一个指向列表中下一个节点的指针,并在每次调用next()
时转到下一个节点。并不是每次都从头开始。然而,如果使用索引并调用get(i)
,则链表必须在每次迭代中从头迭代到第i个元素
您遗漏的是ArrayList和LinkedList的迭代器实现完全不同 @John Skeet:因此,如果我使用list.get(I)
方法,则get
方法必须遍历所有先前元素才能到达节点I
,同时使用迭代器get(I)
将紧跟在下一个
指针之后,因为迭代器位于上一个循环的节点中?我知道这个概念了吗?@user384706:是的,就是这个。