提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
ArrayList源码分析
ArrayList介绍
提示:这里可以添加本文要记录的大概内容:
ArrayList是实现collection接口的集合,ArrayList的底层是数组,为什么有了数组还要有集合呢?因为集合更加方便我们进行add,move,delete操作,更加方便简洁。
提示:以下是本篇文章正文内容,下面案例可供参考
一、ArrayList的源码分析
1.ArrayList的底层操作机制
ArrayList
ArrayListSource的debug代码
然后开启debug,首先我们进入第七行,new一个无参构造方法
这里this.elementData指向的是一个空数组,无参构造初始化的时候,是一个空的数组
然后debug到add方法时,进行数组的扩容
这个方法是为了确保集合是否需要扩容,然后我们step into进入
这里的modCount:记录集合修改的次数
判断集合是否需要去扩容,如果需要则调用grow方法
首先grow方法会获取之前集合的大小,这里有一个扩容的机制,但是原集合的容量为0,newCapacity=0+0/2=0;然后再去判断条件,这里条件成立然后就将minCapacity的值赋给newCapacity然后再用copyof方法进行扩容。
这里原集合就从零变成了容量为10的集合
当集合的容量到达十以后便要再次进行扩容
这里他直接变成了之前的1.5倍
那么当集合是有参构造方法的时候又是什么样呢,这里就不一一介绍了,在有参构造时候,集合扩容时候会按照之前的1.5倍扩容,你们也可以按照以上方法进行debug
每日一句
人生是一场漫长的修行,不断学习,不断提高自己