java核心基础--jdk源码分析学习--ArrayList

java.util.ArrayList

1. 内部由elementData对象数组存储数据
transient Object[] elementData; 
2. 初始大小10
private static final int DEFAULT_CAPACITY = 10;
3. add()时
  1. ensureCapacityInternal(size + 1)
    确保容量足够和扩容,
    扩容,初始10,每次增加的容量为原容量的一半,即第一次扩容后15,第二次是22,第三次33,直到 Integer.MAX_VALUE - 8时会一次分配最大容量,关键代码如下:
newCapacity = oldCapacity + (oldCapacity >> 1); //每次扩容
if (newCapacity - MAX_ARRAY_SIZE > 0) //最大扩容
    newCapacity = hugeCapacity(minCapacity);
            
return (minCapacity > MAX_ARRAY_SIZE) ?  Integer.MAX_VALUE : MAX_ARRAY_SIZE;
  1. 存储对象
elementData[size++] = e;  //size++ 线程不安全
4. hashCode() 继承AbstractList.hashCode()
for (E e : this)
     hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());//每个ArrayList内的元素都参与计算
5. 增删改查效率,参考对数组的操作
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值