ArrayList.trimToSize()方法

这篇博客详细解释了Java ArrayList的trimToSize()方法的工作原理。通过一个实例展示了如何创建一个初始容量为10的ArrayList,然后添加元素,使得elementData数组自动扩容到15。在调用trimToSize()后,多余的容量被删除,elementData的大小调整为实际元素的数量11。文章还附带了源码分析,帮助读者深入理解该方法如何减少内存浪费。
摘要由CSDN通过智能技术生成

在看《Java 核心技术卷一》时,认识到了trimToSize()这个方法。原文内容如图所示。接下来拿例子来参考一下:
在这里插入图片描述
下文内容转载自其他博主blog,讲解的很清晰。

  前几天看了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);
}

oldCapacity = 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);
    }
}

本文内容转载自:https://www.cnblogs.com/hfczgo/p/4062826.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值