【问题标题】:Java and collections:When to use a linked list of arrays?Java 和集合:何时使用数组的链表?
【发布时间】:2012-01-26 08:12:46
【问题描述】:

使用数组的链表有什么好处?

我已经读过,如果数据很大并且允许插入(例如,文本缓冲区),那么一个常见的中途措施是使用数组的链表。
但是没有解释使用这种结构有什么好处。

或者至少我没有得到它。

那么在什么时候使用数组的链表会有什么好处呢?

【问题讨论】:

  • 你的问题很奇怪。当您需要数组的链表时,您可以使用数组的链表。很抱歉讽刺,但您也可以尝试询问使用 HashSet 数组或数组 Stream 的好处。
  • 我明白你在说什么。我的问题是,在我正在阅读的与性能有关的材料中提到了这一点,它提到了这个数据结构(至少我是这样理解的)作为“技巧“在使用访问速度慢但插入和删除速度快的linkedlist 和恰恰相反的array 之间。我认为这可能是我不知道的常见“技巧”
  • 为了快速插入、删除和访问,我们使用 Java 中的 ArrayList。不需要任何自定义数据结构,除非您需要一些需要该自定义结构的特定数据。
  • @Max 这不完全正确,您应该再次检查 javadoc。 ArrayList 与 C++ 中的 std::vector 相同,它是一个非常薄的数组包装器,如果插入索引超过最初分配的大小,则整个数组将被重新分配和复制。这对于少量数据来说是不明显的,但是一旦你开始重新分配和复制几 GB,你就会明白要点......因此名称 Array List.
  • @OP 你的意思是LinkedListArrayList,对吧?您不想将 Java 集合与标准数组混为一谈,是吗?

标签: java arrays performance data-structures collections


【解决方案1】:

使用链表数组,您可以轻松地结合链表和静态数组的优点。

检查this问题。

【讨论】:

    【解决方案2】:

    我认为它能够将新的数据部分(可能相当大)简单地作为新数组插入到列表中,而无需触及列表中位于插入位置之后的现有数组。

    通常,插入链表比插入数组更快,因为它不需要在新元素之后移动元素。在您描述的情况下,好处应该更加显着,因为您不需要移动所有根据定义(平均)很大的后续数据。

    同时,我们应该考虑到访问这种数据结构更复杂,更慢。

    附:另外,如果速度对你来说真的很重要,首先我会做一个小调查,比较现有的数据结构的实际实现(ArrayList、LinkedList、数组等)。

    【讨论】:

      【解决方案3】:

      当您需要从集合中快速获取对象并且您不确定是否有足够的内存来分配“整个”数组(ArrayList 实现)时,您可以编写自己的实现,该实现使用数组列表快速快速找到您要查找的对象。

      但这种方法肯定有更好的数据结构。

      【讨论】:

        【解决方案4】:

        我可以想到相反的情况:链表数组(实际上是哈希图),其中每个数组元素都是一个桶,指向可以动态增长的列表。想想正在构建的字典并添加了新单词,但数字字母的数量是恒定的。

        你描述的一些例子可以是skip list based solution 我还可以想到一些有效的散列或实现一组恒定批处理作业的动态队列。

        【讨论】:

        • 我认为这与我所描述的相反
        • @user384706,第一段绝对与您描述的相反(那里明确说明)。第二个是基于你问的 - 数组列表。
        【解决方案5】:

        想想这个问题:

        想象一个(字面上的)盘子堆如果堆得太高,它 因此,在现实生活中,我们可能会开始一个新的 当前一个堆栈超过某个阈值时堆栈实现数据 模仿这个 SetOfStacks 的结构 SetOfStacks 应该是 由多个堆栈组成,并且应该创建一个新堆栈一次 上一个超出容量 (破解技术代码面试)

        【讨论】:

          【解决方案6】:

          如果不必要,无需创建自定义数据结构。 因为作为Array的Linked List,HashMap没有区别。

          【讨论】:

          • 我认为 HashMap 是一个链表数组.. 不是数组链表。
          猜你喜欢
          • 2017-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多