LinkedList不提供基于索引的访问,那为什么它有get(index)方法呢?

时间:2014-02-23 04:51:16

标签: data-structures linked-list

我理解ArrayList是基于索引的数据结构,它允许你使用索引访问它的元素但是LinkedList不是基于索引的那么为什么它有get(index)方法允许直接访问元素?

3 个答案:

答案 0 :(得分:1)

通过索引从链接列表中检索项目可能效率不高,但链接列表确实有索引,有时您只需要检索某个索引处的项目。当发生这种情况时,使用get方法比强制用户获取迭代器并迭代到所需位置要好得多。只要你不打电话太多或者名单很小,那就没关系。

答案 1 :(得分:1)

这实际上只是一个实施决定。如果你不能通过索引查找元素,那么数组可能是一个相当无用的数据结构,那么向链表实现添加按索引查找不会造成任何伤害(除非用户假设它很快 - 见下文),它确实有时会派上用场。

可以按如下方式为每个元素分配一个数字:

      0               1           2           3           4
Head (Element0) -> Element1 -> Element2 -> Element3 -> Element4 -> NULL

从这里开始,编写一个函数来返回某个给定索引处的元素是非常简单的。

请注意,链接列表上的按索引查找速度很慢 - 如果您正在寻找让我们说中间的元素,那么您需要完成一半的工作列表到达那里。

答案 2 :(得分:0)

先前的答案暗示LinkedLists具有索引。

但是,数据结构中每个元素的固定索引将违反LinkedList的目的,例如使某些删除/添加操作变慢,因为该结构每次都需要重新索引。即使对于列表的开头和结尾的元素,这也将花费线性时间,这对于Java的LinkedList的效率至关重要。

Java's LinkedList implementation中您可以看到,对元素没有恒定的时间索引访问,而是线性遍历,可以在旅途中找出确切的元素。