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。

 

原文地址:https://www.cnblogs.com/newRedFlower/p/4485813.html