Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表文档中的混淆点_Java_List_Collections_Arraylist_Linked List - Fatal编程技术网

Java 列表文档中的混淆点

Java 列表文档中的混淆点,java,list,collections,arraylist,linked-list,Java,List,Collections,Arraylist,Linked List,我不清楚文件中的一点 它说: i) 请注意,这些操作的执行时间可能与 某些实现的索引值(例如LinkedList类) 示例)。 ii)因此,迭代列表中的元素通常是 如果调用方不知道 实施 请注意,我在报价中加入了(I)和(ii) 第(i)点非常明显,因为我们访问链表的方式与随机访问数组的方式不同 但我无法理解第(二)点。 如果我们不知道实现,那么选择迭代器有什么好处? 我的意思是,如果实现是一个LinkedList,那么与通过索引访问相比,性能有什么不同吗? 我想不会,因为不管怎样,迭代器将操作

我不清楚文件中的一点

它说:

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:是的,就是这个。