ArrayList如何工作?

Aut*_*Eta 31 java arraylist

ArrayList在内部使用什么数据结构?

jjn*_*guy 61

在内部ArrayList使用一个Object[].

在向项目添加项目时ArrayList,列表会检查后备阵列是否还有空间.如果有空间,则只在下一个空白处添加新项目.如果没有空间,则创建一个新的较大的数组,并将旧数组复制到新数组中.

现在,还剩下更多空间,新元素将添加到下一个空白区域.

由于人们非常喜欢源代码:

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer.
 */
private transient Object[] elementData;
Run Code Online (Sandbox Code Playgroud)

直接走出JDK.

  • @AutoMEta,它只是一个`Object []`作为它的后备数据结构.并且`Object []`可以容纳任何东西. (6认同)

SLa*_*aks 19

它使用a Object[],并在数组变满时生成更大的数组.

您可以在此处阅读源代码.


小智 9

ArrayList使用Object of Object在内部存储数据.

初始化ArrayList时,会创建一个大小为10(默认容量)的数组,并且添加到ArrayList的元素实际上会添加到此数组中.10是默认大小,它可以在初始化ArrayList时作为参数传递.

添加新元素时,如果数组已满,则会创建一个比初始大小多50%的新数组,并将最后一个数组复制到此新数组,以便现在有空格可以添加新元素.

由于使用的基础数据结构是一个数组,因此将新元素添加到列表末尾时,很容易将新元素添加到ArrayList中.当要在其他任何地方添加元素时,比如开头,那么所有元素都必须向右移动一个位置,以便在开头为要添加的新元素创建一个空白空间.这个过程非常耗时(线性时间).但是ArrayList的优点是在任何位置检索元素非常快(恒定时间),因为它只是使用一个对象数组.