ArrayList底层操作机制源码分析

169 阅读2分钟

ArrayList底层操作机制源码分析

虽然但是,学会看源码还是重要的,就在这浅浅记录一下怎么看源码吧。

重点 难点!!!

分析使用无参构造器,创建和使用 ArrayList的源码: 要学会怎么看源码

创建了一个空的elementDate数组

执行list.add (1)先确定是否要扩容 (2)然后在执行赋值

该方法确定minCapacity (1)第一 次扩容为10

(1) modCount++记录集合被修改的次数 (2)如果elementData的大小不够,就调用grow()去扩容

(1)真的扩容 (2)使用扩容机制来确定要扩容到 多大 (3)第一次newCapacity =10 (4)第二次及其以后,按照1.5倍 扩容 (5)扩容使用的是 Arrays.copyof()->保证原先的数据还在里边再扩容

调完之后,返回返回返回到

只有这个条件成立的时候才去扩容

Idea默认情况下,Debug显示的数据是简化后的,如果希望看到完整的数据,需要自己去设置一下,如图

就可以看全了

分析使用有参构造器,创建和使用 ArrayList的源码:

创建了一个指定大小的elementDate数组 this.elementDate = new Object[capacity]

剩下的和无参构造器的一毛一样

梳理一下怎么看源码的步骤(拿有参构造器的来看)

下断点 Step into 进去

下断点 Step into 进去

Step over 到创建的指定大小的elementDate数组

Step over 到创建的指定大小的elementDate数组

Step out 出去

Step out 出去

Step over 一直跳直接跳到8,i=9

Step over 一直跳直接跳到8,i=9

Step into 进去

Step into 进去

Step into 进去

Step into 进去

Step over 看什么情况

Step over 看什么情况

此时minCapacity=9

此时minCapacity=9

Step into 进去到madCount++

Step into 进去到madCount++

Step into 进去到madCount++

Step into 进去到madCount++

不够用了开始扩容,到扩容机制

不够用了开始扩容,到扩容机制

Step into 进去

Step into 进去

Step over一步步来到Arrays.copyOf()扩容

Step over一步步来到Arrays.copyOf()扩容

到最后就能看到已经扩容了

到最后就能看到已经扩容了

就先到这了,这是我自己一遍遍调试并截图总结出来的,废话不多说先赶进度了。