黑马程序员技术交流社区

标题: 【长沙校区】ArrayList扩容机制 [打印本页]

作者: 长沙-小知姐姐    时间: 2018-12-28 15:35
标题: 【长沙校区】ArrayList扩容机制
本帖最后由 长沙-小知姐姐 于 2019-1-3 09:29 编辑


Java , 前端全网资源链接 : 【长沙校区】集合Java,前端所有基础入门,重点问题一览帖

简介:
ArrayList就是动态数组,它提供了动态的增 加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小。要注意的是 ArrayList并不是线程安全的,因此一般建议在单线程中使用ArrayList
构造方法介绍:

由上面三种构造方法可知,默认情况下使用ArrayList会生成一个大小为10的Object类型 的数组。也可以调用 ArrayList(int initialCapacity) 来初始化Object数组的大小。并且用 户可以往ArrayList中传入一个容器只要这个容器是Collection类型的。调用 ArrayList(Collection c)接口的时候会将容器数组化处理并将这个数组值赋给Object数组。

常用方式扩容:
代码:


扩容源代码:

总结:

扩容主要是和add方法的底层源码相关,其中要弄清楚size和 elementData.length的区别,

size指的是数组中存放元素的个数

elementData.length 表示数组的长度

当new一个ArrayList系统默认产生一个长度为10的elementData数 组,

lementData.length=10,但是由于elementData中还未放任何元素所有size=0。如 果加入元素后数组大小不够会先进行扩容,每次扩容都将数组大小增大一半比如数组大小为10一次扩容后的大小为10+5=10;ArrayList的最大长度为 2^32 .


作者: 一个人一座城0.0    时间: 2018-12-30 13:15
看一看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2