当我们写 -
ArrayList al=new ArrayList(10);
有时写一个像 - 的数组
RefVar = new dataType[10];
记忆中发生了什么?内存是按连续顺序还是分散顺序?
答案 0 :(得分:3)
原则上,Java语言 - 既不是语言规范也不是VM规范 - 没有提到如何实现对象和数组,也不保证连续的内存分配。
实际上,数组是连续的(仅在第一维中!),而ArrayList
是使用数组实现的,因此其中的项引用是连续的。虽然ArrayList
的实现包括与实际数组分开的其他字段。
如果向内部数组已满的ArrayList
添加元素,它将在内部分配一个更大的新数组,并将所有现有元素引用复制到它。所以即使发生这种情况,元素引用仍然是连续的(实际上)。
答案 1 :(得分:0)
对于array
,元素将位于连续的内存位置。
由于ArrayList
维护其元素的基于索引的系统,因为它使用数组数据结构,因此其元素也保留在连续的内存位置。