本帖最后由 长沙-小知姐姐 于 2019-1-3 09:29 编辑
简介: 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 .
|