ArrayList 底层数组扩容原理
System.arraycopy()进行数组拷贝
我们知道当ArrayList如果不指定构造个数的话,第一次往里面添加元素时底层数组会初始化一个长度为10的数组,我们再回顾一下昨天的源码,再来看一下ArrayList里的源码,当添加第11个元素时
再看grow()方法
这儿有一段代码:int newCapacity = oldCapacity + (oldCapacity » 1),»是移位运算符,相当于int newCapacity = oldCapacity + (oldCapacity/2),但性能会好一些。
本文开始那个问题,到这儿就解决了,这就是数组的扩容,一般是oldCapacity + (oldCapacity » 1),相当于扩容1.5倍。
看到这里,相信在以后的面试中,面试官再问数组和ArrayLIst的区别的时候,大家应该有了自己的理解,而不是去背面试题了。
ArrayList还提供了其它构造方法,我们顺便来看一下。
我们再看一下源码,好简单:
当我们在写代码过程中,如果我们大概知道元素的个数,比如一个班级大概有40-50人,我们优先考虑List