您的位置:首页 > 其它

关于ArrayList扩容机制

2017-04-07 15:51 495 查看
ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。

Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子capacityIncrement。

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 = (E[])new Object[newCapacity];  
    System.arraycopy(oldData, 0, elementData, 0, size);  
}  
   }  

public void ensureCapacity(int minCapacity) {  
modCount++;//父类中的属性,记录集合变化次数  
int oldCapacity = elementData.length;  
if (minCapacity > oldCapacity) {//扩容的条件,数组需要的长度要大于实际长度  
    Object oldData[] = elementData;  
    int newCapacity = ((oldCapacity * 3)/2 + 1)<minCapacity?minCapacity: ((oldCapacity * 3)/2 + 1);  
       elementData = (E[])new Object[newCapacity];  
    System.arraycopy(oldData, 0, elementData, 0, size);  
}  
   }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: