Java Collections Framework之ArrayList源码分析

该类是JDK1.2中添加的类,可用于替代Vector(1.1中包含的类库) 其内部持有的也是一个数组。Hierarchy的结构以下:

该类并不是线程安全的,主要含有两个字段:
    elementData:内部持有的数组

    size:ArrayList的长度数组

    构造函数以下:
    
利用该参数初始化该数组。

将数组的大小设置为10,为该数组分配内存空间。

根据Collection c初始化该ArrayList,底层使用的是System.arrayCopy方法 安全

 向该List的尾部添加元素:

首先会调用ensureCapacity(size + 1)方法,检查该List持有的数组是否已到达峰值,若是到了则扩充此数组

由代码可知,每次扩充为原来的一点五倍,可知该操做当容量变大的时候会严重形成内存空间的浪费。函数

 addAll(int index, Collection<? extends E> c):

在index位置处依次添加c中的元素,同时将该index处的元素依次右移。spa

 addAll(Collection<? extends E> c):

从该List的尾部依次添加c中含有的元素线程

clear():

清空该List,内部持有的数组的长度并不发生变化。设计

indexOf(Object o):

返回某元素在该List中的索引。索引

indexOf(Object o):

从该List尾部查找第一次出现该o时的索引。内存

contains(Object o):

查找该List是否包含oci

fastRemove(int index):

删除该索引处的元素,而且使该索引后面的元素依次左移。element

get(int index):

获取索引index处的元素。

isEmpty():

判断该List是否为空

remove(int index):

删除index处的元素,同时右边的元素左移。

remove(Object o):

先查找,再删除。设计到数组元素的左移。

set(int index, E element):

于位置index处设置为element

size():

返回该集合的长度

toArray():

将该集合转化为Object数组。

toArray(T[] a):

将该集合转化为特定的数组。

trimToSize():

将该数组中空的占位符剔除,以便GC回收。

总结:
      该类和Vector的机构几乎彻底相同,该集合非线程安全

相关文章
相关标签/搜索