Java中的ArrayList.trimToSize()方法详解

 更新时间:2023年11月24日 08:44:41   作者:扛麻袋的少年  
这篇文章主要介绍了Java中的ArrayList.trimToSize()方法详解,前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义,需要的朋友可以参考下

ArrayList.trimToSize()方法

在看《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);
    }
}

到此这篇关于Java中的ArrayList.trimToSize()方法详解的文章就介绍到这了,更多相关ArrayList.trimToSize()方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Scanner使用方式:单行/多行输入

    Java中Scanner使用方式:单行/多行输入

    这篇文章主要介绍了Java中Scanner使用方式:单行/多行输入,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Spring Gateway基本使用示例小结

    Spring Gateway基本使用示例小结

    Springcloud Gateway使用了Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架,具体一些特征,本文结合实例代码对Spring Gateway使用给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-11-11
  • java统计汉字字数的方法示例

    java统计汉字字数的方法示例

    这篇文章主要介绍了java统计汉字字数的方法,结合实例形式分析了java正则判定、字符串遍历及统计相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • Java三目运算符用法举例

    Java三目运算符用法举例

    三目运算符是我们经常在代码中使用的,这篇文章主要给大家介绍了关于Java三目运算符用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Springboot整合SpringSecurity实现登录认证和鉴权全过程

    Springboot整合SpringSecurity实现登录认证和鉴权全过程

    这篇文章主要介绍了Springboot整合SpringSecurity实现登录认证和鉴权全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • JavaWeb分页的实现代码实例

    JavaWeb分页的实现代码实例

    这篇文章主要介绍了JavaWeb分页的实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 详解Java中类的加载顺序

    详解Java中类的加载顺序

    Java中什么时候类加载,第一次需要使用类信息时加载。类加载的原则:延迟加载,能不加载就不加载。下面这篇文章主要介绍了Java中类的加载顺序,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 通过实例解析Spring组合注解与元注解

    通过实例解析Spring组合注解与元注解

    这篇文章主要介绍了通过实例解析Spring组合注解与元注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java日常练习题,每天进步一点点(21)

    Java日常练习题,每天进步一点点(21)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • java 反射调用Service导致Spring注入Dao失效的解决方案

    java 反射调用Service导致Spring注入Dao失效的解决方案

    这篇文章主要介绍了java 反射调用Service导致Spring注入Dao失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论