专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 问答 技术问答 ArrayList的原理?

ArrayList的原理?

我们的未来已回答

工程师,Java 让世界更强大。

1.ArrayList是线程不安全的,若要线程安全,则使用CopyOnWriteList。

2.底层是Object[]数组,内部有一个elementData引用指向数组,刚开始默认指向一个缓存空数组(transient),当要进行扩容时,会重新new一个大小为1.5倍(x+(x>>1))的新数组,然后将旧元素通过System.arraycopy这个native方法拷贝到新数组中。

3.随机读写(get、set)方法的算法复杂度为O(1)。

4.增加操作分为两种,add(index,value)的算法复杂度为O(n),因为要通过元素复制进行移动;而add(value)操作的算法复杂度为O(1)(若不发生扩容)。

5.删除操作的时间复杂度为O(n),因为不管是按index进行删除还是按照object去删除,都需要通过复制去实现移动操作,删除后数组大小不会变,靠size属性来维护长度。按object进行删除时不能用new出来的对象,要通过ArrayList内对象的引用删除。

浏览1,024技术问答
2021-06-24 09:00:16

聚焦热点问题
时时免费答疑

累计0人询问

极速问
  >>其他人还看过
更多问答

Java实验班

0学费 专业学前测评

Java就业班

围绕企业 直达就业

Java夜校班

业余时间学 超高性价比

Java架构师班

升职加薪 快速变现

返回顶部