ArrayList源代码详解2

对于add(int index,object o);该方法在特定位置插入元素,底层数组的元素都往后面移动一位,代价相当高,同理remove(int index)

 

对于ArrayList构造方法源代码详解:

public ArrayList(){

    this(10);//调用子类带参数的构造方法

}
public ArrayList(int initialCapacity){
    super();
    if(initialCapacity<0){
        //抛出异常
}
    this.elementData=new Object(initialCapacity);//定义一个数组
}

由此可见,如果我们用默认的构造方法构建ArrayList对象,则底层会生成10个元素长度的一个数组

add(E)方法详解:

public boolean add(E e){
    ensureCapacity(size+1);
    elementData[size++]=e;
    return true;
}
将制定的元素追加到list末尾,
public void ensureCapacity(int minCapacity){
    modCount++;
    int oldCapacity=elementData.length;
    if(minCapacity>oldCapacity){
            object oldData[]=elementData;
            int newCapacity=(oldCapacity*3)/2 + 1;
            if(newCapacity<minCapacity){
                newCapacity=minCapacity;
         
}
           elementData=Arrays.copyof(elementData,newCapacity);
    }
}
由此可以看出,ensureCapacity用于扩展数组本身,如果增加的元素个数超过了10个,则ArrayList底层数组长度为 原数组的长度的1.5倍+1

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值