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 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度