ArrayList 底层数组扩容原理,arraylist扩容
分享于 点击 46516 次 点评:28
ArrayList 底层数组扩容原理,arraylist扩容
ArrayList部分一共五篇文章了,并且引入了时间复杂度来分析,强烈建议大家一定要按顺序阅读,本文是第2篇,相关文章分别是:
1、ArrayList初始化 – Java那些事儿专栏
再次强调,ArrayList是一个普通的类,如果我们开心,可以自己写一个。
ArrayList初始化 – Java那些事儿专栏 文章发表后,评论区有人问如下问题。
我们先回顾一下之前的所说过的数组,话不多说,上代码:
老规则,我们继续画一画,加深一下印象,上图:
这个图我们去掉了ArrayList初探 – Java那些事儿专栏 一文图里那些无用的细节(方法区,常量池等),方便大家看起来清晰,我们用eclipse的debug功能看一下,看是否与我们图上画的一致
再看一下执行结果,也在我们期望中。


既然是固定的,那我们要往数组里加一个“周八”用户怎么办?没办法,只能重新new长一点的新的数组,把原来数组的元素复制过去,好吧,开始写代码吧,相信大家都会写



看到System.arraycopy()方法是不是似曾相识呢?我们在ArrayList初探 – 知乎专栏 一文中提了一下,相信看到这里,大家都知道ArrayList里的底层数组扩容是怎么实现的了吧。在ArrayList初探 – 知乎专栏 一文中,我们知道当ArrayList如果不指定构造个数的话,第一次往里面添加元素时底层数组会初始化一个长度为10的数组,我们再回顾一下昨天的源码,再来看一下ArrayList里的源码,当添加第11个元素时


看到这里,相信在以后的面试中,面试官再问数组和ArrayLIst的区别的时候,大家应该有了自己的理解,而不是去背面试题了。
ArrayList还提供了其它构造方法,我们顺便来看一下。

用户点评