Java Collections Framework之ArrayList源码分析

分享到:
该类是JDK1.2中添加的类,可用于替代Vector(1.1中包含的类库) 其内部持有的也是一个数组。Hierarchy的结构如下:
Java Collections Framework之ArrayList源码分析
该类并非线程安全的,主要含有两个字段:
    elementData:内部持有的数组

    size:ArrayList的长度

    构造函数如下:
    Java Collections Framework之ArrayList源码分析
利用该参数初始化该数组。
Java Collections Framework之ArrayList源码分析
将数组的大小设置为10,为该数组分配内存空间。
Java Collections Framework之ArrayList源码分析
根据Collection c初始化该ArrayList,底层使用的是System.arrayCopy方法

 向该List的尾部添加元素:
Java Collections Framework之ArrayList源码分析
首先会调用ensureCapacity(size + 1)方法,检查该List持有的数组是否已到达峰值,如果到了则扩充此数组
Java Collections Framework之ArrayList源码分析
由代码可知,每次扩充为原来的一点五倍,可知该操作当容量变大的时候会严重造成内存空间的浪费。

 addAll(int index, Collection c):
Java Collections Framework之ArrayList源码分析
在index位置处依次添加c中的元素,同时将该index处的元素依次右移。

 addAll(Collection c):
Java Collections Framework之ArrayList源码分析
从该List的尾部依次添加c中含有的元素

clear():
Java Collections Framework之ArrayList源码分析
清空该List,内部持有的数组的长度并不发生变化。

indexOf(Object o):
Java Collections Framework之ArrayList源码分析
返回某元素在该List中的索引。

indexOf(Object o):
Java Collections Framework之ArrayList源码分析
从该List尾部查找第一次出现该o时的索引。

contains(Object o):
Java Collections Framework之ArrayList源码分析
查找该List是否包含o

fastRemove(int index):
Java Collections Framework之ArrayList源码分析
删除该索引处的元素,并且使该索引后面的元素依次左移。

get(int index):
Java Collections Framework之ArrayList源码分析
获取索引index处的元素。

isEmpty():
Java Collections Framework之ArrayList源码分析
判断该List是否为空

remove(int index):
Java Collections Framework之ArrayList源码分析
删除index处的元素,同时右边的元素左移。

remove(Object o):
Java Collections Framework之ArrayList源码分析
先查找,再删除。设计到数组元素的左移。

set(int index, E element):
Java Collections Framework之ArrayList源码分析
于位置index处设置为element

size():
Java Collections Framework之ArrayList源码分析
返回该集合的长度

toArray():
Java Collections Framework之ArrayList源码分析
将该集合转化为Object数组。

toArray(T[] a):
Java Collections Framework之ArrayList源码分析
将该集合转化为特定的数组。

trimToSize():
Java Collections Framework之ArrayList源码分析
将该数组中空的占位符剔除,以便GC回收。

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

昵    称:
验证码:

相关文档: