ArrayList原理分析
ArrayList原理
ArrayList的常量与变量有哪些!
当集合中的元素超出数组规定的长度时,数组就会进行扩容操作,扩容操作就是ArrayList存储操作缓慢的原因,尤其是当数据量较大的时候,每次扩容会消耗的时间就会越来越多
ArrayList 的方法有哪些?
- add()
add()方法中主要用到了一个新的方法——ensureCapacityInternal,来看下ensureCapacityInternal的源码:
而 ensureCapacityInternal 主要调用的是 ensureExplicitCapacity 方法和 calculateCapacity 方法,我们先看下calculateCapacity 方法:
点击ensureCapacityInternal中的ensureExplicitCapacity,可以看到来到了 ensureExplicitCapacity 方法,而 ensureExplicitCapacity 主要调用的就是上面所说的 grow 方法,源码如下:
grow方法源码如下:
grow方法调用的hugeCapacity源码如下:
总结:在进行 add 操作时先判断下标是否越界,是否需要扩容,如果需要扩容,就复制数组,然后设置对应的下标元素值扩容:默认扩容一半,如果扩容一半不够的话,就用目标的size作为扩容后的容量
- get()
3. set()
4. remove()
其他的方法就先不看了。