ArrayList源码1
2021-07-13 16:18:13 6 举报
描述了ArrayList底层源码一些方法
作者其他创作
大纲/内容
index
grow:先将用右移和加法运算,将旧容量变为原来的1.5倍 1.判断新容量 > 最小容量?如果小于新容量 = 最小容量,大于新容量直接可用。2.检查新容量是否超过,ArrayList定义的最大长度?如果不大于直接用,如果大于调用hugeCapacity方法,对比新容量与Integer.MAXVAL的大小
ensureExplicitCapacity:判断是否需要扩容?即最小容量与当前数组容量作比较
1.数组先扩容1
构造方法
index + 1
hugeCapacity:如果新容量小于Integer.MAXVal,新容量为ArrayList所定义的最大长度,否则新容量为Integer.MAXVAL
ensureCapacity:扩容的前提,知道最小容量:initcapacity
无参构造:创建默认大小为10 的数组
有参构造:initcapacity > 0 || initcapacity = 0
将指定的集合转换为ArrayList
calculateCapacity:返回扩容后的最小容量,一般情况为size + 1
add方法
ensureCapacityInternal:数组扩容initcapacity = size + 1
trimToSize:修改当前ArrayList的容量为当前列表的容量,避免空间的浪费
ArrayList扩容机制
arraycopy方法:从index位置开始,从前往后,依次将index位置上的元素移动到 index - 1位置上,重复(size - index)次
收藏
0 条评论
回复 删除
下一页