LXX的网络日志
人因梦想而伟大
ArrayList源码剖析(一):基本原理以及优缺点

ArrayList底层就是基于数组来实现的,它的缺点是什么呢?优点又是什么呢?

数组的长度都是固定的,Java里面的数组都是定长数组,比如数组大小设置为100,此时你不停的往ArrayList里面塞入这个数据,此时元素超过了100以后,此时就进行数组的扩容,会搞一个更大的数组,把以前的数组拷贝到新的数组里面去。

缺点:

这个数组的扩容+元素的拷贝过程中,相对来说会慢一些。

频繁的扩容,再加上数据量大的话,肯定会对性能造成一定的影响的。

如果要对数组的中间的一个位置,插入一个元素,它还要对后面的元素,往后挪动一位,要是数组容量不够了,还要进行扩容。性能也不太好。

删除元素也是一样,删除了某个元素之后,也要把后面的元素往前挪动一位。

经常的插入元素和删除元素性能都不太好。

优点:

基于数组来实现,非常适合随机读取,因为可以根据下标就找到想要的元素,这种读取的方式是非常高效的。简单的说一下就是,它底层对数组的实现来快速的随机读取到某个元素,可以直接通过内存地址来定位某个元素。

ArrayList还是比较适合多读取,少写入的情况。