【问题标题】:How does an array of nodes work?节点数组如何工作?
【发布时间】:2015-03-18 03:58:49
【问题描述】:

这是基于我的另一个问题。 What is an array linked structure or node array?

我试图做这个练习

对我的另一个问题的回答之一要求我请我的老师澄清什么是数组链接层次结构。在我问她之后,她说这只是一个节点数组。

我认为节点数组与 laune 所说的一致,因为 " 是一种技术,如果你有一组有限的固定类型节点,保存在数组 Node[] = new Node[CAPACITY] 中, Node 的一个字段是一个 int - 索引。像往常一样,有效负载是任何东西。最初,您有一个可用列表中的所有节点,链接 0->1->2->",有效负载是节点持有,其中包括数据及其持有的链接。

所以从所有这些来看,这就是我脑海中的数据结构

public class NodeArray {
   private ListNode[] elementData;
    ...
   private class ListNode {
        private int data;
        private ListNode next;
        ....
   }
 }

这种节点数组数据结构与常规链表和数组列表相比有什么优势?我看不出你为什么想要这样的数据结构。对我来说,它只是 ArrayList 的另一个来源,因为数组列表是通用的,它们的数组可以用于任何类型,包括列表节点。

【问题讨论】:

  • 我看到这样做的唯一区别是利用对逻辑列表中任何节点的恒定时间访问,而不是必须遍历列表来查找特定节点。不过这真的取决于它的应用。

标签: java list data-structures arraylist linked-list


【解决方案1】:

我倾向于认为链表更适合插入和删除,而数组列表更适合搜索。

数组列表的一些优点:

- 一个数组列表的内存是统一的,而不是一个链表的,其不相交的节点对象将位于稀疏地址。让所有对象彼此靠近可以改善缓存和内存查找。

-使用数组列表搜索第 n 个元素是一个数组索引,它是一个 O(1) 操作;而在链表中搜索第 n 个元素是 O(N) 操作。

链表的一些优点:

-数组列表分配的内存通常比必要的多,因为每次达到容量时都需要分配一个全新的内存块,并且必须复制原始数组中的数据。

-删除操作可能会更便宜,因为删除地址上方的内存不需要向下移动。

编辑:这是对您问题的一个很好的答案 When to use LinkedList over ArrayList?

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2023-04-06
    相关资源
    最近更新 更多