ArrayListのソースコード解析--jdk1.8

ArrayListの概要

  1. ArrayListの膨張率は、動的に、動的容量アレイベースの実装のコレクションを冗長配列を除去することができます。
  2. ArrayListのサポートランダムアクセス、クローニング、配列決定、および注文した要素を繰り返すことができます。
  3. ArrayListのオブジェクト[]格納し、各種のデータを使用して、初期のデフォルトの長さ10、。

ArrayListのデータ構造

  データ構造は、データ構造は、多くの場合、我々はソースコードが唯一の方法である分析し、様々なデータ構造を理解し、コレクションの役割とフォーカスを制限嘘のコレクションの本質です。
  ArrayListのデータ構造は次のよう:
ArrayListのソースコード解析--jdk1.8

ArrayListのソースコード解析

/*
 * 用数组实现的集合,支持随机访问,元素有序且可以重复
 * RandomAccess(ArrayList) 支持快速随机访问,使用for循环更加快速
 * LinkedList 使用 iterator迭代器更加 快速
 * RandomAccess 这是一个标记接口,一般此标记接口用于 List 实现,以表明它们支持快速(通常是恒定时间)的随机访问。
 * 该接口的主要目的是允许通用算法改变其行为,以便在应用于随机或顺序访问列表时提供良好的性能
 */
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
 /**
     * 默认长度  10
     */
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * 默认空的数组
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};

    /**
     * ArrayList中的元素  是Object[]类型的数组
     */
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     * 动态数组的实际大小 ,默认为0
     * @serial
     */
    private int size;

         /**
     * 集合长度构造函数
     */
    public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
    }

         /**
     * 无参构造函数,设置元素数组为空 注意此时初始容量是0,而不是大家以为的 10
     */
    public ArrayList() {
        super();
        this.elementData = EMPTY_ELEMENTDATA;
    }

    /**
     * 集合参数构造函数
     */
    public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray(); // 转化为数组
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class) //是否成功转化为Object类型数组
            elementData = Arrays.copyOf(elementData, size, Object[].class); //不为Object数组的话就进行复制
    }

分析と実装の継承のArrayList
ArrayListのソースコード解析--jdk1.8
   ArrayListにAbstractList拡張
   AbstractListがAbstractCollection拡張する
  Javaクラスは、すべてのオブジェクト、図ようにArrayListを継承構造を継承します。
   1. AbstractListがList <E>インターフェイスは、List <E>リストを実装する抽象クラスは、一般的なメソッドを定義し、抽象クラスAbstractList抽象メソッドを持つことができ、また、特定の実装を持つことができ、インタフェースは、AbstractListを達成することです基本的な追加/ GET /のindexOf /イテレータのsubList達成するためのいくつかの一般的な方法 / RandomAccessSubList 、独自のユニークな方法のいくつかの実現で、その後自分自身を方法、ArrayListのをして、AbstractListを継承し、メソッド/の一般的な基礎を得るために、そして、この利点は次のとおりです。聞かせてコードより簡潔な、クラスの継承階層の底部は、一般的な方法は、コードの重複を減らすこと、一緒に達成するために、抽出されます。
   2.ArrayListはリスト<E>、ランダム・、Cloneableを実装してシリアライズ、

おすすめ

転載: blog.51cto.com/hackerxian/2426030