如果不使用迭代器就无法访问下一个元素,为什么 Java 会有一个链表?
5 回答
您不会“将列表转换为迭代器”,而是“在列表上获得迭代器”。您会发现迭代器机制更容易及时使用。
LinkedList
是List
接口的实现,也是Collection
. 链表本身就是一个概念,链表的每个元素都包含在一个节点中,该节点知道下一个元素和前一个元素。这样做是为了保持元素的插入顺序。
另一个常见的实现不会发生这种情况:ArrayList
每个元素都分配在底层数组中,在这种情况下,不能保证顺序。
Aniterator
是迭代列表的多种方法之一,该方法恰好在迭代时管理列表(例如,remove
迭代器的方法不以 a 结尾ConcurrentModificationException
)并且它与特定的无关遍历集合的实现。它不是集合,它只是以循环友好的方式“管理”它。
因为你想让你的代码与特定的实现无关。如果它具有“next”功能,并且稍后您想更改为 ArrayList 实现,那么您将遇到一个大问题...
还有更多解释:
LinkedList
只是List
接口的另一种实现。ArrayList
和之间的主要区别在于LinkedList
数组使用可扩展数组来保存列表,当LinkedList
保存对下一个对象的引用时。
您仍然具有get(index)
在索引中获取对象的功能,但效率不高(O(n))。
当 ArrayList 更高效时,LinkedList 主要用于减少运行时间。
还有更多: LinkedList VS ArrayList
迭代器只是一种遍历列表的方法。之所以有LinkedList
数据结构,与某些操作的效率有关。
有关如何在 a和 an之间进行选择的详细说明,请参阅此答案。LinkedList
ArrayList
如果您只想拥有下一个元素,则可以使用
list.get(Int index+1);
并将索引设置为
index = list.indexOf(<The current object your are in>);
如果您目前不知道自己在哪个对象中,则必须使用迭代器。这相当容易且非常快。
每个人都可以使用一个。
for(List l : o)