當我們寫 -Java集合列表存儲結構
ArrayList al=new ArrayList(10);
有時寫這樣的數組 -
RefVar = new dataType[10];
什麼是在內存中發生了什麼?內存是否位於連續的順序或分散的順序?
當我們寫 -Java集合列表存儲結構
ArrayList al=new ArrayList(10);
有時寫這樣的數組 -
RefVar = new dataType[10];
什麼是在內存中發生了什麼?內存是否位於連續的順序或分散的順序?
對於array
s元素將在一個連續的內存位置。
而且由於ArrayList
維護基於索引的系統的元素,因爲它使用數組數據結構,所以它的元素也保留在連續的內存位置。
原則上,Java語言(既不是語言規範也不是VM規範)沒有提到如何實現對象和數組,並且不保證連續的內存分配。
實際上,雖然數組是連續的(僅在它們的第一維!),並且ArrayList
是使用數組實現的,因此其內部的項引用是連續的。儘管ArrayList
的實現包括與實際陣列分離的其他字段。
如果向內部陣列已滿的ArrayList
添加一個元素,它將在內部分配一個新的更大的陣列並將所有現有的元素引用複製到它。所以即使發生這種情況,元素引用仍然是連續的(在實踐中)。
也許提到有關在最初分配的大小之外增加AL的情況? – esej