• ArrayList中ensureCapacity的使用与优化


    对于ArrayLis中有一个方法ensureCapacity(int n),这个方法可以对ArrayList低层的数组进行扩容,显示的调用这个函数,如果参数大于低层数组长度的1.5倍,那么这个数组的容量就会被扩容到这个参数值,如果参数小于低层数组长度的1.5倍,那么这个容量就会被扩容到低层数组长度的1.5倍。说这么多,总而言之,记住这个函数可以对低层数组扩容就行了,在适当的时机,好好利用这个函数,将会使我们写出来的程序性能得到提升例如如下两段代码

     1     public static void main(String[] args) {
     2         final int N=1000000;
     3         Object obj=new Object();
     4         ArrayList list1=new ArrayList();
     5         long start=System.currentTimeMillis();
     6         for(int i=0;i<N;i++){
     7             list1.add(obj);
     8         }
     9         System.out.println(System.currentTimeMillis()-start);
    10         
    11         ArrayList list2=new ArrayList();
    12         long start2=System.currentTimeMillis();
    13         list2.ensureCapacity(N);//显示的对低层数组进行扩容
    14         for(int i=0;i<N;i++){
    15             list2.add(obj);
    16         }
    17         System.out.println(System.currentTimeMillis()-start2);
    18     }
    执行结果:31

                        16

    第2段的效率显然要比第一段高很多,原因是因为,第一段如果没有一次性扩到想要的最大容量的话,它就会在添加元素的过程中,一点一点的进行扩容,要知道对数组扩容是要进行数组拷贝的,这就会浪费大量的时间。如果已经预知容器可能会装多少元素,最好显示的调用ensureCapacity这个方法一次性扩容到位。

     
  • 相关阅读:
    委托与事件
    Winform 窗体闪烁 & 任务栏提示
    Main函数
    WPF数据虚拟化
    异步编程、线程和任务
    内存管理与垃圾回收
    Winform 获取桌面设备上下文
    全选,反选,全不选以及计算价格,删除
    全选、反选、删除
    解析数据图片自动轮播——圆点
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/9266693.html
Copyright © 2020-2023  润新知