Java 为什么可以';难道我们不能手动遍历LinkedList吗?
Java 为什么可以';难道我们不能手动遍历LinkedList吗?,java,doubly-linked-list,Java,Doubly Linked List,LinkedList是一种数据结构,其中每个元素都与指向其下一个元素的链接相耦合 因此,从理论上讲,这种数据结构是为了在执行任何操作(可能除了删除您当前所在的元素)的同时,以任意方向在列表中自由迭代而设计的 然而,在应用程序中,情况并非如此。从LinkedList返回迭代器要遵守常规的迭代器规则(即迭代时不进行修改),甚至创建一个列表迭代器,这是一个改进的迭代器,允许修改迭代器的下一个/上一个元素,让您动态地向前/向后移动,仍然有严重的局限性: 如果当前不在列表的开头,则不能从列表的开头删除元素
LinkedList
是一种数据结构,其中每个元素都与指向其下一个元素的链接相耦合
因此,从理论上讲,这种数据结构是为了在执行任何操作(可能除了删除您当前所在的元素)的同时,以任意方向在列表中自由迭代而设计的
然而,在应用程序中,情况并非如此。从LinkedList返回迭代器要遵守常规的迭代器
规则(即迭代时不进行修改),甚至创建一个列表迭代器
,这是一个改进的迭代器
,允许修改迭代器的下一个/上一个元素,让您动态地向前/向后移动,仍然有严重的局限性:
如果当前不在列表的开头,则不能从列表的开头删除元素,也不能将元素添加到列表的末尾,除非当前在列表的末尾
那么,在对列表进行任何修改时,有没有一种方法可以自由地在
LinkedList
中迭代?如果没有,为什么没有呢?实现它不应该是这个数据结构的主要目标之一吗?如果您想自由地迭代使用数组或列表。链表用于遍历和访问在动态分配数据内存时有用的数据。如果要自由迭代,请使用数组或列表。链表用于遍历和访问对数据动态分配内存有用的数据。此行为不特定于LinkedList
s。使用列表迭代器
迭代列表
(任何列表
)时,只能在迭代器的当前位置进行结构更改(添加或删除元素)。否则,在列表的结构更改后继续使用迭代器可能会产生意外的结果
要将元素添加到LinkedList
的开头或结尾,可以使用addFirst
和addLast
方法。您不必迭代列表
ListIterator
实例维护一种状态,允许它定位下一个和上一个元素,并支持其他操作(删除当前元素,在当前位置添加元素)。如果不是通过列表迭代器
对列表
进行结构更改,迭代器的状态可能会变为无效,从而导致意外结果。因此,必须通过列表迭代器
进行所有结构更改
我想LinkedList
类可以提供一个更复杂迭代器的实现,它支持addFirst
和addLast
等操作。我不确定这会有多大用处,也不确定这是否会证明增加的复杂性是合理的。这种行为并不特定于LinkedList
s。使用列表迭代器
迭代列表
(任何列表
)时,只能在迭代器的当前位置进行结构更改(添加或删除元素)。否则,在列表的结构更改后继续使用迭代器可能会产生意外的结果
要将元素添加到LinkedList
的开头或结尾,可以使用addFirst
和addLast
方法。您不必迭代列表
ListIterator
实例维护一种状态,允许它定位下一个和上一个元素,并支持其他操作(删除当前元素,在当前位置添加元素)。如果不是通过列表迭代器
对列表
进行结构更改,迭代器的状态可能会变为无效,从而导致意外结果。因此,必须通过列表迭代器
进行所有结构更改
我想LinkedList
类可以提供一个更复杂迭代器的实现,它支持addFirst
和addLast
等操作。我不确定这会有多大用处,也不确定这是否会证明增加的复杂性是合理的。当您有一个链表数据结构时,当光标指向要添加或删除的正确节点时,您可以在特定节点添加或删除
将指定的元素插入列表(可选操作)。这个
元素插入到将要插入的元素之前
由next()返回(如果有),并在将
由previous()返回,如果有。新元素将在之前插入
隐式游标:对next的后续调用将不受影响,
随后对previous的调用将返回新元素。(本
call将调用返回的值增加1
下一个索引或上一个索引。)
相反,如果它是一个数组结构,那么您可以通过索引进行访问,并且可以在受数组长度限制的特定索引处添加或删除。ArrayList就是这样做的。当您有一个链表数据结构时,当光标指向要添加或删除的右侧节点时,您可以在特定节点上添加或删除
将指定的元素插入列表(可选操作)。这个
元素插入到将要插入的元素之前
由next()返回(如果有),并在将
由previous()返回,如果有。新元素将在之前插入
隐式游标:对next的后续调用将不受影响,
随后对previous的调用将返回新元素。(本
call将调用返回的值增加1
下一个索引或上一个索引。)
相反,如果它是一个数组结构,那么您可以通过索引进行访问,并且可以添加