nilfunc 2017-06-07 07:08
浏览 626
已结题

ensureCapacity()优化问题

 import java.util.ArrayList;

public class ArrayListSpeed {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        final int N = 10000000;
        Object obj = new Object();

        /*没用调用ensureCapacity()方法初始化ArrayList对象*/
        ArrayList list = new ArrayList();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i <= N; i++) {
            list.add(obj);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("没有调用ensureCapacity()方法所用时间:"
                + (endTime - startTime) + "ms");

        /*调用ensureCapacity()方法初始化ArrayList对象*/
        list = new ArrayList();
        startTime = System.currentTimeMillis();

        // 预先设置list的大小
        list.ensureCapacity(N);
        for (int i = 0; i <= N; i++) {
            list.add(obj);
        }
        endTime = System.currentTimeMillis();
        System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime)
                + "ms");
    }
}

结果 :
没有调用ensureCapacity()方法所用时间:81ms
调用ensureCapacity()方法所用时间:48ms

起到了优化效果

 import java.util.ArrayList;

public class ArrayListSpeed {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        final int N = 100000000;  //多加了一个零
        Object obj = new Object();

        /*没用调用ensureCapacity()方法初始化ArrayList对象*/
        ArrayList list = new ArrayList();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i <= N; i++) {
            list.add(obj);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("没有调用ensureCapacity()方法所用时间:"
                + (endTime - startTime) + "ms");

        /*调用ensureCapacity()方法初始化ArrayList对象*/
        list = new ArrayList();
        startTime = System.currentTimeMillis();

        // 预先设置list的大小
        list.ensureCapacity(N);
        for (int i = 0; i <= N; i++) {
            list.add(obj);
        }
        endTime = System.currentTimeMillis();
        System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime)
                + "ms");
    }
}

结果却大大不同 :

没有调用ensureCapacity()方法所用时间:596ms
调用ensureCapacity()方法所用时间:2283ms

这是为什么 ?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 C++ yoloV5改写遇到的问题
    • ¥20 win11修改中文用户名路径
    • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
    • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
    • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
    • ¥15 帮我写一个c++工程
    • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
    • ¥15 关于smbclient 库的使用
    • ¥15 微信小程序协议怎么写
    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?