ArrayList不是线程安全的,其底层是通过Object[] 数组实现的。
ArrayList源码分析记录
首先ArrayList继承了AbstractList类,实现了List接口
1.属性
DEFAULT_CAPACITY 默认初始的容量的大小,默认为10
EMPTY_ELEMENTDATA 用于共享的空数组实例
DEFAULTCAPACITY_EMPTY_ELEMENTDATA 默认大小空数组实例,知道第一个元素核实被添加
elementData 数组缓存对象数组,当elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA时,第一个元素被添加时将会扩展默认大小的数组(该属性没有被初始化的原因就是,简化嵌套类访问)
size 这个表示数组中拥有对象的个数
静态成员变量,当ArrayList的实例尝试扩展时,超过这个值的话,可能会导致OutOfMemoryError
2.构造方法
构造一个初始容量是initalCapactity的一个数组
构造默认大小是空的数组,初始容量是10
构造一个包含指定元素的列表,元素顺序和列表迭代的顺序是一致的,
3.方法
将该实例当前列表容量大小的实例,应用程序可以操作最小化存储
Size获取集合中元素的个数,isEmpty判断集合中的额元素是否为空
IndexOf通过遍历数组,获取元素对象的下标,如果对象不存在则返回-1;
Contains判断元素是否存在
获取元素最后一次出现的下标,不存在返回-1
返回指定索引位置的元素,rangeCheck()方法是判断,该下标是否越界,越界的话则会抛出一个数组越界异常IndexOutOfBoundsException
添加元素,和在指定位置添加元素,rangeCheckForAdd()是判断元素插入的位置,是否越过数组的界限,越界的话会抛出IndexOutOfBoundsException
在添加的元素时,判断数组是否需要扩容,当size+1大于elementData的length时,则数组会扩容,
这是数组的扩容机制,当扩容容量的大小大于数组最大的值时,会抛出异常,
根据下标删除数组中的元素,并且返回删除的元素
这是个人理解,理解有差错的地方,欢迎大佬提出来!