节点数组如何工作?

时间:2015-01-20 02:02:03

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

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

我正在尝试做这个练习 enter image description here

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

我认为节点数组与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中的另一个,因为数组列表是通用的,它们的数组可以使用任何类型,包括列表节点。

1 个答案:

答案 0 :(得分:0)

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

数组列表的一些优点:

- 数组列表的内存被合并,与链接列表相对,链接列表的脱节节点对象将位于稀疏地址。让所有对象彼此靠近可以改善缓存和内存查找。

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

链接列表的一些优点:

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

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

编辑:这里是您问题的绝佳答案 When to use LinkedList over ArrayList?