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 over 到创建的指定大小的elementDate数组
Step out 出去
Step over 一直跳直接跳到8,i=9
Step into 进去
Step into 进去
Step over 看什么情况
此时minCapacity=9
Step into 进去到madCount++
Step into 进去到madCount++
不够用了开始扩容,到扩容机制
Step into 进去
Step over一步步来到Arrays.copyOf()扩容
到最后就能看到已经扩容了
就先到这了,这是我自己一遍遍调试并截图总结出来的,废话不多说先赶进度了。