線性表的定義
由零個或者多個數據元素組成的有限序列。
順序表
順序存儲的線性表就是順序表。
實現順序存儲結構的方法是使用數組。
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
}