【问题标题】:LinkedList does not provide index based access, so why does it have get(index) method?LinkedList 不提供基于索引的访问,为什么它有 get(index) 方法?
【发布时间】:2014-03-24 17:37:03
【问题描述】:

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

【问题讨论】:

  • 这个问题有点不对,我觉得,因为getIndex(i)不是链表的接口,是字典数据结构的接口,反过来可以通过链表的方式实现
  • “基于索引的数据结构”是什么意思?
  • 字典数据结构是一种数据结构,它的值是通过它们的键来访问的。特别是在列表中,键是索引

标签: data-structures linked-list


【解决方案1】:

通过索引从链表中检索项目可能效率不高,但链表确实有索引,有时您只需要检索某个索引处的项目。发生这种情况时,使用get 方法比强迫用户获取迭代器并迭代到所需位置要好得多。只要不叫太多或者列表少就行了。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 2021-07-27
        • 2023-01-12
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多