【问题标题】:Array list or linked list is better to store indexed objects?数组列表或链表更好地存储索引对象?
【发布时间】:2014-06-17 18:54:10
【问题描述】:

这是在我的 Java 问题纸上,两者中哪一个最适合用于一组索引对象? ArrayListLinkedList 我以为是LinkedList。正确答案是什么,请解释原因?

【问题讨论】:

  • 定义 best 也许这个问题会好一点。什么是最好的很大程度上取决于你想用那个列表做什么。答案很可能是ArrayList,但是如果你想去一个早期的索引,然后删除一堆元素(诚然是一个罕见的用例),那么LinkedList 可能会更好。
  • 一个关于如此基本的问题的问题应该伴随着一些研究(见How to Ask)。 为什么你认为链表会更好?你了解这两个列表的工作原理吗?
  • 这个问题已经被问过无数次了。例如here 是关于这两者差异的非常好的答案。
  • @yshavit "数组列表还是链表更适合存储索引对象?"是怎么问的对吗?好的。所以现在的问题是,如果我知道为什么?为什么我问别人?如果您可以发布答案不是更好吗,为什么应该是链接列表或数组列表?

标签: java arraylist linked-list


【解决方案1】:

链表不是random access;要检索某个索引处的元素,您必须从头开始遍历列表,直到到达该索引。另一方面,数组(在其上构建ArrayList)是随机访问的,这意味着您可以在给定索引处以恒定时间简单地检索元素。因此ArrayList 更适合存储索引对象。

【讨论】:

    【解决方案2】:

    ArrayLists 专门用于索引数据。 LinkedLists 不是索引数据结构。使用ArrayList,您提供索引,ArrayList 提供存储值。使用LinkedList,你必须遍历列表才能获取存储的值。

    【讨论】:

    • 小细节:LinkedLists 一种索引数据结构,因为每个元素都有一个索引。它们只是不是针对随机索引探测优化的结构。
    • @yshavit 它们绝对是一个有序数据结构(与Set相反)。我必须查找“索引”的确切定义(我相信对此有不同的看法)。但是一本书中的索引使我能够查找某些内容并直接转到正确的页面,而无需逐页阅读,因此我很难将必须按顺序遍历的列表视为“索引”。
    • @ajb 如果你不能直接跳转到一个条目(例如,HashMapTreeMap)。我不知道“索引数据结构”是否有正式定义,但对我来说,它意味着“为每个条目分配一个(整数)索引的结构”。 LinkedList的基本方法是get(int index)set(int index, E element);听起来对我有索引。这并不意味着导航到该索引必须高效。
    • 在 LinkedList 上调用 set(index, element) 会遍历列表以到达该元素。它没有被编入索引。
    • 那么,这是否意味着index 不是指索引,而是指同名的不同概念? ;)
    猜你喜欢
    • 2017-04-18
    • 2021-09-26
    • 2018-11-13
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多