码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayList源码分析

时间:2015-05-07 20:15:18      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

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。

 

 

ArrayList源码分析

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!