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()方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于RocketMQ实现分布式事务的方法

    基于RocketMQ实现分布式事务的方法

    了保证系统数据的一致性,我们需要确保这些服务中的操作要么全部成功,要么全部失败,通过使用RocketMQ实现分布式事务,我们可以协调这些服务的操作,保证数据的一致性,这篇文章主要介绍了基于RocketMQ实现分布式事务,需要的朋友可以参考下
    2024-03-03
  • 基于mybatis高级映射多对多查询的实现

    基于mybatis高级映射多对多查询的实现

    下面小编就为大家带来一篇基于mybatis高级映射多对多查询的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 使用java执行定时任务示例

    使用java执行定时任务示例

    这篇文章主要介绍了使用java执行定时任务示例,需要的朋友可以参考下
    2014-04-04
  • java读取resource目录下文件的方法示例

    java读取resource目录下文件的方法示例

    这篇文章主要介绍了利用java读取resource目录下文件的方法,文中给出了详细的示例代码,相信对大家具有一定的参考借鉴,需要的朋友们下面来一起看看吧。
    2017-02-02
  • Java实例化的几种方法总结

    Java实例化的几种方法总结

    这篇文章主要介绍了Java实例化的几种方法总结的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java binarysearch方法原理详解

    Java binarysearch方法原理详解

    这篇文章主要介绍了Java binarysearch方法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    这篇文章主要介绍了SpringBoot项目集成Flyway进行数据库版本控制,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 利用Sharding-Jdbc组件实现分表

    利用Sharding-Jdbc组件实现分表

    这篇文章主要为大家详细介绍了利用Sharding-Jdbc组件实现分表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • springboot 按月分表的实现方式

    springboot 按月分表的实现方式

    本文主要介绍了springboot 按月分表的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Spring框架JdbcTemplate数据库事务管理完全注解方式

    Spring框架JdbcTemplate数据库事务管理完全注解方式

    这篇文章主要介绍了Spring框架JdbcTemplate数据库事务管理及完全注解方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论