博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
list.ensureCapacity竟然会变慢
阅读量:5162 次
发布时间:2019-06-13

本文共 3147 字,大约阅读时间需要 10 分钟。

list.ensureCapacity竟然会变慢

jdk1.8

应该是做了优化了;

public class Test10 {    public static void main(String[] args) {        ArrayList
list = new ArrayList<>(); long beginTime = System.currentTimeMillis(); for (int i = 0; i < Integer.MAX_VALUE / 300; i++) { list.add(i); } long endTime = System.currentTimeMillis(); CusPrint.print(endTime - beginTime); // 344 }}public class Test11 { public static void main(String[] args) { ArrayList
list = new ArrayList<>();// ArrayList
list = new ArrayList<>(Integer.MAX_VALUE/300); // 这样也挺慢的 CusPrint.print("---"); list.ensureCapacity(Integer.MAX_VALUE/300); // 这样竟然比不加这句要慢 CusPrint.print("---"); long beginTime = System.currentTimeMillis(); for (int i = 0; i < Integer.MAX_VALUE / 300; i++) { list.add(i); } long endTime = System.currentTimeMillis(); CusPrint.print(endTime - beginTime); // 3391 }}

 测了一下还是数组快:

beginTime2 = System.currentTimeMillis();        int [] arr1 = new int[Integer.MAX_VALUE/300];        for(int i=0;i

 放到一起,修改一下list的最大容量,数组就是快,使用了ensureCapacity就是慢;

public class Test11_2 {    public static void main(String[] args) {        ArrayList
list = new ArrayList<>(); CusPrint.print("---"); int capacity = Integer.MAX_VALUE/30; list.ensureCapacity(capacity); // 这样竟然比不加这句要慢 CusPrint.print("---"); long beginTime = System.currentTimeMillis(); for (int i = 0; i < capacity; i++) { list.add(i); } long endTime = System.currentTimeMillis(); CusPrint.print(endTime - beginTime); // 26524 CusPrint.print("---------------"); ArrayList
list2 = new ArrayList<>(); long beginTime2 = System.currentTimeMillis(); for (int i = 0; i < capacity; i++) { list2.add(i); } long endTime2 = System.currentTimeMillis(); CusPrint.print(endTime2 - beginTime2); // 20126 CusPrint.print("---------------"); for(int i=0;i

 改到Integer.MAX_VALUE/3;直接就OOM了;

list.ensureCapacity(capacity);  // 就是这句就可以OOM

异常:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space	at java.util.Arrays.copyOf(Arrays.java:3210)	at java.util.Arrays.copyOf(Arrays.java:3181)	at java.util.ArrayList.grow(ArrayList.java:265)	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)	at java.util.ArrayList.ensureCapacity(ArrayList.java:219)	at com.stono.thread3.page_arraylist.Test11_2.main(Test11_2.java:14)

你在凝望深渊的时候,深渊也在凝望你,别看太久。

 哈哈,再看会儿:

使用list.trimToSize();竟然可以变快;

public class Test30 {    public static void main(String[] args) {        ArrayList list = new ArrayList();        list.ensureCapacity(Integer.MAX_VALUE / 300);        list.trimToSize();        long beginTime = System.currentTimeMillis();        for (int i = 0; i < Integer.MAX_VALUE / 300; i++) {            list.add(i);        }        long endTime = System.currentTimeMillis();        System.out.println(endTime - beginTime);    }}

 

转载于:https://www.cnblogs.com/stono/p/8520284.html

你可能感兴趣的文章
面试经验[all]
查看>>
算法笔记
查看>>
6 行为型模式之 - 命令模式
查看>>
Mvc ModelState.isValid为false时,检查时那个字段不符合规则的代码
查看>>
Python 之 基础知识(三)
查看>>
cluster集群
查看>>
搞JAVA在北京月薪15K的朋友来到厦门却很难找到工作
查看>>
冒泡数组排序
查看>>
kibana5画图
查看>>
类的加载和反射
查看>>
Linux学习笔记四
查看>>
JavaScript
查看>>
[转]getHibernateTemplate出现的所有find方法的总结
查看>>
【转】HTTP中的长连接和短连接分析
查看>>
scala 基本语法
查看>>
2019.08.02 学习整理
查看>>
JavaScript面向对象基础语法总结
查看>>
页面输入模糊数据---异步后台查询
查看>>
Java基础入门(二)
查看>>
Numpy数组
查看>>