ArrayList源码分析
ArrayList继承AbstractList类,实现List接口。继承关系见下图。
图1. 类继承图
图2. 接口继承图
ArrayList常用方法
//添加
public void add(int index);
public void add(int index, T element);
//删除
public T remove(int index);
public boolean remove(Object o);
//修改
public T set(int index, T element);
//查询
public int indexOf(Object o);
public int lastIndexOf(Object o)
public T get(int index);
public boolean contains(Object o);
在自学的过程中有启发的地方总结如下:
1.查询方法的互调关系
四个查询方法中的基础方法中,基础方法为indexOf...,其他方法都可以调用该方法
2. 查询方法lastIndexOf
查找元素最后一次出现的位置,这时可以倒序遍历数组,则第一次出现的值即为正序遍历的结果。
3.即使有功能类似的方法,也可以创建逻辑更简单的方法工内部调用。
如下为 private void fastRemove(int index)方法,在删除指定值(public boolean remove(Object o))时,调用该方法。
与public T remove(int index);方法相比,该方法不做数组边界检查(因为该方法的调用者已经完成了边界检查),也不返回被删除的值。
/*
* Private remove method that skips bounds checking and does not
* return the value removed.
*/
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work (1)
}
4. 及时将不再使用的值置为null,以便垃圾回收机制回收。
如上,删除最后一个元素值, elementData[--size] = null;及时将最后一个值置为null。
posted on 2015-05-07 19:26 redSunflower 阅读(207) 评论(0) 编辑 收藏 举报