在询问之前进行了一些搜索,一些不那么可靠的消息来源表明存在潜在的Object[]
数组。
那么简单吗?即它在必要时处理调整大小,可能会做一些技巧,例如加倍大小以获得更好的摊销运行时间,并跟踪阵列中第一个空槽的位置。
或者,是否对成员资格测试和稀疏数组进行了优化?
答案 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