arraylist——ArrayList的容量

转载 2016年08月31日 09:46:48
ArrayList.size()//方法返回的是一个int,所以它最多能放Integer.MAX_VALUE((2^31)-1)个元素。

转自http://blog.csdn.net/arui319/article/details/3557743

List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。
ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。
每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。


ArrayList是经常会被用到的,一般情况下,使用的时候会像这样进行声明:
List arrayList = new ArrayList();
如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。
可以通过调试看到动态增长的数量变化:10->16->25->38->58->88->...


也可以使用下面的方式进行声明:
List arrayList = new ArrayList(4);
将ArrayList的默认容量设置为4。当ArrayList中的元素超过4个以后,会重新分配内存空间,使数组的大小增长到7。
可以通过调试看到动态增长的数量变化:4->7->11->17->26->...


那么容量变化的规则是什么呢?请看下面的公式:
((旧容量 * 3) / 2) + 1
注:这点与C#语言是不同的,C#当中的算法很简单,是翻倍。


一旦容量发生变化,就要带来额外的内存开销,和时间上的开销。
所以,在已经知道容量大小的情况下,推荐使用下面方式进行声明:
List arrayList = new ArrayList(CAPACITY_SIZE);
即指定默认容量大小的方式。

ArrayList的初始容量的问题

ArrayList的初始容量的问题
  • jsqfengbao
  • jsqfengbao
  • 2015年06月07日 08:57
  • 3314

ArrayList集合容量有上限吗?

讨论ARRAYLIST数组容量上限,以及自动增加长度的原理。
  • congbufawen
  • congbufawen
  • 2015年10月08日 14:34
  • 5263

ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量

原文转自http://www.cnblogs.com/xiezie/p/5511840.html   这里要讨论这些常用的默认初始容量和扩容的原因是: 当底层实现涉及到扩容时,容器或...
  • u011032983
  • u011032983
  • 2016年08月22日 00:30
  • 3613

关于ArrayList的初始容量以及扩容的效率问题

关于ArrayList的初始容量以及扩容的效率问题 分类: Java2010-01-20 08:20 7096人阅读 评论(13) 收藏 举报 objectc 论坛的一个问题: ...
  • evilcry2012
  • evilcry2012
  • 2015年04月16日 16:15
  • 898

ArrayList和Vector区别以及其扩容机制

ArrayList和Vector区别以及其扩容机制 相同点:   1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口     (extends AbstractList im...
  • dietime1943
  • dietime1943
  • 2017年01月09日 15:40
  • 835

ArrayList的初始化和扩容解读

ArrayList的初始化和扩容解读 ======================= 1.JDK 1.6  (1)默认的构造函数 初试化时的长度为10: public ArrayList()...
  • liuzongxi
  • liuzongxi
  • 2015年03月30日 20:23
  • 1231

ArrayList初始默认容量(长度)

每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝...
  • jdsjlzx
  • jdsjlzx
  • 2016年09月26日 23:29
  • 25311

关于ArrayList和Vector空间利用率的一点探索

看到一篇java方面的文章其中提到ArrayList和Vector俩容器,文章作者提到Vector的空间利用率比ArrayList要大,最有意思的是他说Vector的空间利用率能达到100%。看到这里...
  • Javanjg
  • Javanjg
  • 2016年11月03日 21:35
  • 672

Java ArrayList的自动扩容机制

注意: 不同的JDK版本的扩容机制可能有差异 实验环境:JDK1.8 扩容机制: 当向ArrayList中添加元素的时候,ArrayList如果要满足新元素的存储超过ArrayList存...
  • yang1464657625
  • yang1464657625
  • 2017年03月01日 16:04
  • 1814

集合的默认初始容量、加载因子、扩容增量

这里要讨论这些常用的默认初始容量和扩容的原因是: 当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全...
  • qq_25827845
  • qq_25827845
  • 2016年09月19日 21:43
  • 2545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:arraylist——ArrayList的容量
举报原因:
原因补充:

(最多只允许输入30个字)