博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java ArrayList trimToSize()
阅读量:6811 次
发布时间:2019-06-26

本文共 1316 字,大约阅读时间需要 4 分钟。

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

 

转载于:https://www.cnblogs.com/hfczgo/p/4062826.html

你可能感兴趣的文章
java中equals和==的区别
查看>>
利用博客与视频分享和交流知识和经验
查看>>
知道二叉树前序和中序序列打印后序序列
查看>>
js操作dom对象
查看>>
由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目
查看>>
小例子背后的大道理——从DIP中“倒置”的含义说接口的正确使用
查看>>
Windows 8 异步编程
查看>>
基本控件使用实例-用户登录设计
查看>>
[转]javascript图片放大效果
查看>>
Jquery常用技巧(3)
查看>>
Struts2系列——struts2的result
查看>>
UE4 Log
查看>>
ldd 查看程序/动态库 的依赖
查看>>
Revit二次开发之“遍历标高Level”
查看>>
Google APIs .net 客户端库初体验
查看>>
在命令行中打开sqlite的数据库
查看>>
正则表达式点滴(2)
查看>>
Using the Platform MBean Server and Platform MBeans
查看>>
Android开发之日历控件实现
查看>>
SQL修改字段默认值
查看>>