jdk1.6 1.7 list扩容的区别
jdk1.6 1.7 list扩容的区别
小艺术家被占用了 发表于1年前
jdk1.6 1.7 list扩容的区别
  • 发表于 1年前
  • 阅读 17
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

jdk1.6

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;  

    // minCapacity is usually close to size, so this is a win:  

    elementData = Arrays.copyOf(elementData, newCapacity); 

jdk1.7

private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

    private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0) // overflow
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ?
            Integer.MAX_VALUE :
            MAX_ARRAY_SIZE;

    }

区别:1、扩容后大小区别,1.6乘除运算后为1.5x+1,1.7位运算后为1.5x,效率提高

           2、1.7设置最大容量限制

共有 人打赏支持
粉丝 0
博文 16
码字总数 4044
×
小艺术家被占用了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: