ArrayList是如何在Java中实现的?

ArrayList是如何在Java中实现的?,java,Java,在询问之前进行了一些搜索,一些不太可靠的来源表明存在一个底层的对象[]数组 就这么简单吗?i、 它在必要时处理大小调整,可能会做一些技巧,比如将大小加倍以获得更好的摊销运行时,并跟踪阵列中第一个空插槽的位置 或者,是否对成员资格测试和稀疏数组进行了优化?这是一个对象数组。来源: 是的,底层对象[]按照您最初的推测进行管理,包括阵列增长50%。成员资格测试没有优化;直接搜索列表元素,一个接一个 值得一看TofuBeer链接的源代码……通过研究Sun/Oracle工程师的形式化、优化和“防御性编码

在询问之前进行了一些搜索,一些不太可靠的来源表明存在一个底层的
对象[]
数组

就这么简单吗?i、 它在必要时处理大小调整,可能会做一些技巧,比如将大小加倍以获得更好的摊销运行时,并跟踪阵列中第一个空插槽的位置


或者,是否对成员资格测试和稀疏数组进行了优化?

这是一个对象数组。来源:


是的,底层对象[]按照您最初的推测进行管理,包括阵列增长50%。成员资格测试没有优化;直接搜索列表元素,一个接一个


值得一看TofuBeer链接的源代码……通过研究Sun/Oracle工程师的形式化、优化和“防御性编码”,您可以学到很多东西。

An
ArrayList
扩展了
AbstractList
并实现了四个接口,即<代码>列表,随机访问,可克隆,java.io.Serializable

它将
对象[]
数组中的元素存储为:
私有瞬态对象[]元素数据

如果您说:
ArrayList arr=new ArrayList()
然后默认情况下,它会创建一个大小为
10
ArrayList


有一种方法
private void grow(int minCapacity)
可以调整
ArrayList

的大小,就这么简单。你知道你可以查看源代码,对吧?如果你正在寻找优化,并且使用的是已知大小的ArrayList,那么你应该预先初始化它的大小。这可以防止ArrayList在每次添加新对象时不断调整数组大小。你真的可以在那里阅读源代码。多么令人困惑的名字。让人怀疑它是一个带有列表接口的数组,还是一个列表接口的数组……人们不应该忘记,可能有一个或另一个原因导致某些东西以一种特定的方式实现。特别是,由于backcomp的原因,所有用泛型改装的类都可能以一种相当复杂或“次优”的方式实现。根据链接的源代码,它每次扩展时都会增长50%,而不是两倍。
private transient Object[] elementData;