數據結構(JAVA描述)的學習_02_18/11/05(努力,奮鬥)

線性表的定義

由零個或者多個數據元素組成的有限序列。

順序表

順序存儲的線性表就是順序表。
實現順序存儲結構的方法是使用數組。

ArrayList的源碼(jdk1.7)

	/**
	* 定義數組默認容量大小爲10
	*/
	private static final int DEFAULT_CAPACITY = 10;

    /**
     * 常量空的Object[]數組
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};

    /**
     * 當前數組元素的個數
     */
    private int size;

    /**
     * 有參構造
     * 輸入初始化容量值(值<0,拋出IllegalArgumentException異常)
     * 輸出長度爲輸入值的Object[]數組
     */
    public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
    }

    /**
     * 空參構造,返回一個空的Object[]數組
     */
    public ArrayList() {
        super();
        this.elementData = EMPTY_ELEMENTDATA;
    }

重點看add()方法和delete()方法

 	/**
 	* add(E e)方法
 	* 輸入要添加的數據元素e
 	* 完成在原有數組最後再添加數據元素
 	* 輸出添加是否成功
 	*/
 	public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // 這個方法應該是確保容量足夠,不夠就開闢新的容量足夠的數組,將就得數組存入新數組,具體實現過程尚未深究。
        elementData[size++] = e;//將e存入當前數組最後位置的後一位
        return true;//返回add成功
    }

下面是在指定索引位置插入數據元素

    /**
     * add(int index, E element)
     * 輸入要插入的索引位置index和要插入的數據元素element
     * 完成在指定索引位置插入數據元素
     * 無輸出
     */
    public void add(int index, E element) {
        rangeCheckForAdd(index);//檢查索引位置是否合法

        ensureCapacityInternal(size + 1);  // 確保容量足夠
        
        /**
        * public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)
        * 從指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束。
        * 從 src 引用的源數組到 dest 引用的目標數組,數組組件的一個子序列被複製下來。
        * 被複制的組件的編號等於length 參數。
        * 源數組中位置在 srcPos 到 srcPos+length-1 之間的組件被分別複製到目標數組中的 destPos 到 destPos+length-1 位置。
        */
        System.arraycopy(elementData, index, elementData, index + 1, size - index);
        
        elementData[index] = element;//在索引位置插入element
        size++;//當前數組的數據元素個數+1
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章