admin管理员组文章数量:1611513
今天,简单讲讲如何获取
ArrayList的Capacity。
这里,需要了解一下ArrayList的源码。
一.ArrayList的源码解析
每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。
这里所说的容量(Capacity) 不是我们通过ArrayList.getSize()获取的返回值,而是ArrayList里的数组的大小,即ArrayList开辟的内存的大小。
有文章说ArrayList默认构造的容量为10,没错。 因为ArrayList的底层是由一个Object[]数组构成的,而这个Object[]数组,默认的长度是10,所以有的文章会说ArrayList长度容量为10。
然而你所指的size()方法,指的是“逻辑”长度。
所谓“逻辑”长度,是指内存已存在的“实际元素的长度” 而“空元素不被计算”
即:当你利用add()方法,向ArrayList内添加一个“元素”时,逻辑长度就增加1位。 而剩下的9个空元素不被计算。
ArrayList<String> list = new ArrayList<String>();
System.out.println("size = " + list.size());
输出结果如下:
size = 0
ArrayList默认size()是0.而这时的Capacity已经是10.
ArrayList源码解析
JDK版本不一样,ArrayList类的源码也不一样。
- JDK1.8
ArrayList类结构
//通过ArrayList实现的接口可知,其支持随机访问,能被克隆,支持序列化
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//序列版本号
private static final long serialVersionUID = 8683452581122892189L;
//默认初始容量
private static final int DEFAULT_CAPACITY = 10;
//被用于空实例的共享空数组实例
private static final Object[] EMPTY_ELEM
本文标签: androidArrayListCapacity
版权声明:本文标题:android 获取ArrayList的Capacity 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728619777a1166200.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论