欢迎光临散文网 会员登陆 & 注册

千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java

2023-07-20 18:53 作者:向来不回首  | 我要投稿

ArrayList源码分析

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

private static final Object[] EMPTY_ELEMENTDATA = {};

(1)这两个空数组就是先判断是无参构造还是带参构造

add()方法:

1.ensureCapacityInternal(size + 1); 先保证容量

在保证容量的方法中,在计算最小容量,判断无参和有参数,无参的话就将DEFAULT_CAPACITY这个空数组等于10,接下来就是确认这个容量是否能满足如果满足,因为我们本次需要的最小容量比你集合中底层实现数组的长度还长,不能保证容量,如果你要的这个数组长度小于给与的长度,最终的数组长度就为10,如果不满足,将进行grow(minCapacity)这个方法进行扩容,在这个grow方法中将数组的hash值右移1位,也就是扩容1.5倍,然后再判断是否满足,以后的而每次扩容都是扩容1.5倍 如果是带参,那么就再这个带参的基础上每次扩容1.5倍

2.elementData[size++] = e;数组赋值

3.成功:return true;

例子:一个ArrayList如果要存放20个元素,要扩容几次?

10,15,22---前提是使用的是无参构造

如果带参,参数是0,那么扩容的方式是:

1,2,3,4,6,9,13,19,28

千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java的评论 (共 条)

分享到微博请遵守国家法律