软件编程
位置:首页>> 软件编程>> java编程>> ArrayList的自动扩充机制实例解析

ArrayList的自动扩充机制实例解析

作者:ysk_xh_521  发布时间:2021-10-20 17:38:29 

标签:java,arraylist,扩充

用一道选择题作为本文的开始吧!

ArrayList list = new ArrayList(20);中的list扩充几次

A.0
B.1
C.2
D.3

答案:A

1、ArrayList的默认初始容量为10,当然也可以自定义指定初始容量,随着动态的向其中添加元素,其容量可能会动态的增加,那么扩容的公式为:

新容量 = 旧容量/2 + 旧容量

比如:初始容量为4,其容量的每次扩充后的新容量为:4->6->9->13->19->…

即每次扩充至原有基础的1.5倍

ArrayList的构造函数总共有三个:

(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。

调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A

如果初始化为ArrayList(0),则会在新容量计算完毕后,增加至1;

另外与之类似的还有,

2、HashMap的初始大小为16,增长时,直接容量翻番,如源代码。


void addEntry(int hash, K key, V value, int bucketIndex) {
   if ((size >= threshold) && (null != table[bucketIndex])) {
     resize(2 * table.length);//原容量2倍
     hash = (null != key) ? hash(key) : 0;
     bucketIndex = indexFor(hash, table.length);
   }
   createEntry(hash, key, value, bucketIndex);
}

3、Vector的初始大小为10,如果没有指定每次增长的大小,则默认是翻倍增长。

来源:http://blog.csdn.net/ysk_xh_521/article/details/77529198

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com