zoukankan      html  css  js  c++  java
  • Java ArrayList trimToSize()

    前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义。贴在这里。

           ArrayList al = new ArrayList(10);
            for(int i=0;i<10;i++){
                al.add(i);
            }
            al.add(1);
            al.trimToSize();

    例子很简单,就是new一个初始容量为10的ArrayList,之后向里面加入一个元素。接下来看看debug的内容:

    可以看到,向ArrayList里面加入10个元素之后,elementData的内容如图所示。

    elementData数组动态增长到容量为15。这是我们看看ArrayList的源码:

     private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }

    olaCapacity = 10,1010(10)右移一位位0101(5),newCapacity = 10 + 5 = 15;

    之后调用trimToSize()方法,再看看debug内容:

    此时elementData的大小变为了11。也就是说这个方法将elementData的数组设置为ArrayList实际的容量,动态增长的多余容量被删除了。

    再贴个trimToSize()方法的源码:用Arrays.copyOf(T [],int newLength)这个方法来截取elementData数组。

    public void trimToSize() {
            modCount++;
            if (size < elementData.length) {
                elementData = Arrays.copyOf(elementData, size);
            }
        }
  • 相关阅读:
    文档的几何形状和滚动
    聊聊并发——生产者消费者模式
    在JavaScript中什么时候使用==是正确的?
    HTML5使用canvas画图时,图片被自动放大模糊的问题
    获取元素的几种方式
    利用jQuery和CSS实现环形进度条
    最实用、最常用的jQuery代码片段
    表格样式
    javascript常量的定义
    null 和 undefined 的区别
  • 原文地址:https://www.cnblogs.com/hfczgo/p/4062826.html
Copyright © 2011-2022 走看看