4

如果不使用迭代器就无法访问下一个元素,为什么 Java 会有一个链表?

4

5 回答 5

4

您不会“将列表转换为迭代器”,而是“在列表上获得迭代器”。您会发现迭代器机制更容易及时使用。

于 2013-02-14T13:22:10.820 回答
4

LinkedListList接口的实现,也是Collection. 链表本身就是一个概念,链表的每个元素都包含在一个节点中,该节点知道下一个元素和前一个元素。这样做是为了保持元素的插入顺序。

另一个常见的实现不会发生这种情况:ArrayList每个元素都分配在底层数组中,在这种情况下,不能保证顺序。

Aniterator是迭代列表的多种方法之一,该方法恰好在迭代时管理列表(例如,remove迭代器的方法不以 a 结尾ConcurrentModificationException)并且它与特定的无关遍历集合的实现。它不是集合,它只是以循环友好的方式“管理”它。

于 2013-02-14T13:22:59.247 回答
1

因为你想让你的代码与特定的实现无关。如果它具有“next”功能,并且稍后您想更改为 ArrayList 实现,那么您将遇到一个大问题...

还有更多解释: LinkedList只是List接口的另一种实现。ArrayList和之间的主要区别在于LinkedList数组使用可扩展数组来保存列表,当LinkedList保存对下一个对象的引用时。

您仍然具有get(index)在索引中获取对象的功能,但效率不高(O(n))。

当 ArrayList 更高效时,LinkedList 主要用于减少运行时间。

还有更多: LinkedList VS ArrayList

于 2013-02-14T13:19:50.870 回答
1

迭代器只是一种遍历列表的方法。之所以有LinkedList数据结构,与某些操作的效率有关。

有关如何在 a和 an之间进行选择的详细说明,请参阅此答案LinkedListArrayList

于 2013-02-14T13:20:06.607 回答
1

如果您只想拥有下一个元素,则可以使用

list.get(Int index+1);

并将索引设置为

index = list.indexOf(<The current object your are in>);

如果您目前不知道自己在哪个对象中,则必须使用迭代器。这相当容易且非常快。

每个人都可以使用一个。

for(List l : o)
于 2013-02-14T13:26:07.980 回答