Java集合列表内存结构

时间:2015-05-30 09:11:27

标签: java arrays

当我们写 -

ArrayList al=new ArrayList(10);

有时写一个像 - 的数组 RefVar = new dataType[10];

记忆中发生了什么?内存是按连续顺序还是分散顺序?

2 个答案:

答案 0 :(得分:3)

原则上,Java语言 - 既不是语言规范也不是VM规范 - 没有提到如何实现对象和数组,也不保证连续的内存分配。

实际上,数组是连续的(仅在第一维中!),而ArrayList是使用数组实现的,因此其中的项引用是连续的。虽然ArrayList的实现包括与实际数组分开的其他字段。

如果向内部数组已满的ArrayList添加元素,它将在内部分配一个更大的新数组,并将所有现有元素引用复制到它。所以即使发生这种情况,元素引用仍然是连续的(实际上)。

答案 1 :(得分:0)

对于array,元素将位于连续的内存位置。

由于ArrayList维护其元素的基于索引的系统,因为它使用数组数据结构,因此其元素也保留在连续的内存位置。