关于list集合,添加元素底层代码执行流程

1.了解ArrayList变量的

DEFAULT_CAPACITY :初始数组大小     

当执行无参构造时,数组  elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA   这一点需要记住,当添加第一个元素时两个内存地址相等

关于

transient Object[] elementData;    
transient 关键字的含义可以参考:https://www.cnblogs.com/lanxuezaipiao/p/3369962.html
当执行add方法时:

size:默认为0

如果集合长度小于10则将长度默认设置为10,

第一次传入过来的minCapacity为10

oldCapacity:为集合真实长度(此时集合长度并不是10),  而newCapacity:为 oldCapacity/2  +oldCapacity

如果newCapacity<minCapacity 则仍将集合长度设置为10

当新的集合长度-Max_ARRAY_SIZE大于零

则会去判断长度,最大长度为2的31次方-1,超过则抛出异常

判断条件通过  会执行 Arrays.copy()//传入的两个参数 第一 当前数组,新的长度

其中 newType 与Object[].class做比较,这一点设计到了反射,对于一个类,它的class是相等的

反射参考:https://blog.csdn.net/sinat_38259539/article/details/71799078

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值