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



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

按索引从链表中检索项目可能效率不高,但链表确实有索引,有时您只需要检索某个索引处的项目。发生这种情况时,最好有一个get方法,而不是强迫用户抓取迭代器并迭代到所需的位置。只要你不叫得太多或者列表很小,就没问题。

这实际上只是一个实施决策。虽然如果你不能按索引查找元素,数组可能是一个相当无用的数据结构,但向链表实现添加按索引查找不会造成任何伤害(好吧,除非用户认为它很快 - 见下文),而且它有时确实派上用场。

可以为每个元素分配一个数字,如下所示:

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

从这里开始,编写一个函数来返回某个给定索引处的元素是微不足道的。

请注意,在链表上的按索引查找会很慢 - 如果你正在寻找中间的元素,你需要完成一半的列表才能到达那里。

前面的答案暗示 LinkedList 有索引。

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

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

最新更新