Java 链表非连续存储器

Java 链表非连续存储器,java,linked-list,Java,Linked List,我很难从过去的试卷中找到以下问题的答案。我希望你能解释一下 链表使用非连续内存,这意味着什么?非连续意味着链表的元素不一定位于内存中的相邻位置。这与使用连续内存的数组或数组列表不同。对于数组和数组列表,连续的元素也位于相邻的内存位置。这意味着列表的每个节点都可以位于内存中的任何位置。这是列表与数组的一个区别,数组是连续存储的。链表使用链接,链接指向列表中的下一个元素,这些链接在内存中不必相邻。因此,链表中的每个元素都可以位于任何内存位置,使用这些链接,我们可以按顺序遍历链表。而另一侧的数组使用连

我很难从过去的试卷中找到以下问题的答案。我希望你能解释一下


链表使用非连续内存,这意味着什么?

非连续意味着链表的元素不一定位于内存中的相邻位置。这与使用连续内存的数组或数组列表不同。对于数组和数组列表,连续的元素也位于相邻的内存位置。

这意味着列表的每个节点都可以位于内存中的任何位置。这是列表与数组的一个区别,数组是连续存储的。

链表使用链接,链接指向列表中的下一个元素,这些链接在内存中不必相邻。因此,链表中的每个元素都可以位于任何内存位置,使用这些链接,我们可以按顺序遍历链表。而另一侧的数组使用连续内存块,这意味着所有元素都彼此相邻。

在这种情况下,非连续内存指的是分配给构成链表的节点的内存地址不是连续的。将其与传统阵列进行比较,传统阵列中每个节点都按顺序出现。在带有指针的语言中(至少是C系列),您可以通过向表示索引的内存地址添加一个数字来访问数组中的下一个索引,而不是增加索引本身。其中,上述数字是数组中包含的数据类型的大小(以字节为单位)

回到链表和java

在Java中,您无法显式地访问内存位置,但出于性能原因,底层概念仍然很重要。访问数组中的某些内容(索引通过添加到指针而递增)比访问链表中的某些内容(下一个节点需要跳转到链表中)更快。因此,访问链表中的索引需要O(n)个时间,而数组需要O(1)个时间


我希望这至少有点道理

链表以节点序列的形式呈现,其成员变量指向列表中的下一个(也可以是上一个)节点。构建链表时,通常使用第一个节点(即头部)来构建它。当需要将新元素添加到链表中时,首先需要创建它。它是在内存中的某个地方创建的,可以是堆,也可以是堆栈。内存由操作系统分配,它取决于操作系统给我们的内存位置。在创建新节点之后,我们必须将当前节点的“下一个”分配给该新节点


什么是连续的数据结构?一个数组。

由于此问题的数据结构特定方面,因此不是该问题的重复。通过快速搜索Stack Overflow或您喜爱的internet搜索引擎,可以轻松回答此类基本性质的问题。链表是一种动态数据结构,可以在内存中收缩和增长。它不需要分配一定数量的内存就可以存在,它的大小和形状可以改变,它需要的内存量也可以改变。