ArrayLists是如何用Java实现的?

时间:2011-09-12 01:17:04

标签: java

在询问之前进行了一些搜索,一些不那么可靠的消息来源表明存在潜在的Object[]数组。

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

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

3 个答案:

答案 0 :(得分:30)

它是一个Object数组。来自消息来源:

http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/java/util/ArrayList.java

private transient Object[] elementData;

答案 1 :(得分:8)

是的,底层的Object []是在您第一次推测时进行管理的,包括通过加倍的数组增长。没有优化成员资格测试;只是直接搜索列表元素,一个接一个。

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

答案 2 :(得分:3)

ArrayList扩展AbstractList并实现四个接口即。 List<E>, RandomAccess, Cloneable, java.io.Serializable

它将元素存储在Object[]数组中:private transient Object[] elementData;

如果您说:ArrayList arr=new ArrayList();,则默认情况下会创建ArrayList大小10

方法private void grow(int minCapacity)可调整ArrayList

的大小