wen870105 2010-03-28 11:14
浏览 263
已采纳

ArrayList(1) 这样初始化为什么会对性能大幅影响

ArrayList(1) 这样初始化为什么会对性能大幅影响

看了源码还是不胜了解

  • 写回答

2条回答 默认 最新

  • 拽拽的初行者 2010-03-28 12:57
    关注

    [color=blue][b]如果list的容量小的话,则会进行数组的copy。这样原来的数组 就被废弃了,又新建了一个数组。

    所以,如果进行大量元素的添加,为了效率考虑,构造时指定容量,或者调用[/b][/color]
    [code="java"]
    ensureCapacity()[/code]
    [b]具体解释,见以下代码(JDK1.6update18):[/b]

    [code="java"] public boolean add(E e) {
    // 先决定是否扩充数组
    ensureCapacity(size + 1); // Increments modCount!!
    // 然后添加元素
    elementData[size++] = e;
    return true;
    }

    public void ensureCapacity(int minCapacity) {
        modCount++;
        int oldCapacity = elementData.length;
                // 如果容量不够,则进行数组的容量扩充与复制
        if (minCapacity > oldCapacity) {
            Object oldData[] = elementData;
                        // 新的容量的计算方法
            int newCapacity = (oldCapacity * 3) / 2 + 1;
    
                        // 如果新的容量还是小的话,则直接使用minCapactiy
            if (newCapacity < minCapacity)
                newCapacity = minCapacity;
            // 复制指定的数组,多余的空位用0填充
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
    }[/code]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。