//randomaccess:隨機快速訪問介面
//cloneable是標記型的介面,它們內部都沒有方法和屬性,實現 cloneable來表示該物件能被轉殖,能使用object.clone()方法。如果沒有實現 cloneable的類物件呼叫clone()就會丟擲clonenotsupportedexception
//serializable:物件的序列化處理
public class arraylistextends abstractlistimplements list, randomaccess, cloneable, serializable else
//引數為0,創造乙個空陣列
this.elementdata = empty_elementdata;}}
//無參建構函式,構造乙個初始容量為0的陣列
public arraylist()
//?:任意類
public arraylist(collection extends e> c) else
} else
}
/**
* arraylist擴容機制
* arraylist有三種建構函式:無參,使用者指定大小和指定集合元素的列表
* 無參:初始化為空陣列,當呼叫時擴容為10
* @param mincapacity
*///ensurecapacity() 方法用於設定具有指定容量大小的動態陣列。
//mincapacity - 動態陣列的容量
public void ensurecapacity(int mincapacity)
}//陣列擴容
private object grow(int mincapacity)
private object grow()
private int newcapacity(int mincapacity) else if (mincapacity < 0) else
} else
}private static int hugecapacity(int mincapacity) else
}
index,e element)
private void add(e e, object elementdata, int s)
//賦值
elementdata[s] = e;
//size+1
this.size = s + 1;
}//.add(e element)時
public boolean add(e e)
//.add(int index,e element)元素插入指定位置
public void add(int index, e element)
//index後的資料複製過來
system.arraycopy(elementdata, index, elementdata, index + 1, s - index);
//插入
elementdata[index] = element;
this.size = s + 1;
}/**
* public static void arraycopy(
* object src, //源陣列
* int srcpos, //源陣列的起始位置
* object dest, //目標陣列
* int destpos, //目標陣列的起始位置
* int length //複製長度
* )
**/
//縮小長度
public void trimtosize()
}//indexof ()的意思:查詢乙個字串中,第一次出現指定字串的位置。
public boolean contains(object o)
public e get(int index)
public e set(int index, e element)
empty_elementdata和defaultcapacity_empty_elementdata的異同 1)defaultcapacity_empty_elementdata:無參建構函式建立,當第一次執行add操作時
陣列擴容為10
2)empty_elementdata則加1
ensurecapacity(int mincapacity)方法:
1)當設定的mincapacity>容量且不是無參建構函式構造的陣列或者mincapacity>10,才會去呼叫擴容的方法
2)所以當陣列為defaultcapacity_empty_elementdata時用這個方法要設定的值》10才會實際擴容
add相關
1)有參建構函式陣列,容量大於4開始進行1.5倍擴容
ArrayList原始碼學習
arraylist 乙個由陣列實現的集合物件,預設容量為10。特點 1 隨機查詢快 因為陣列是連續的記憶體空間可以使用索引直接定位陣列內的元素 2 隨機插入慢 因為會移動陣列 方法 add public boolean add e e grow 擴容時先判斷當前陣列size的2倍是否滿足所需最小si...
ArrayList原始碼學習
對於arraylist我們都很熟悉,使用起來非常的方便,使用的較多的方法有add remove indexof 等,對於這種優秀的集合框架,研究其原始碼能讓我們對其掌握更加深刻,能更合理的應用在業務場景中,同時我們自己在寫程式時也能夠參考其設計思想,提供我們的編碼水平。一.arraylist簡介 1...
原始碼學習 ArrayList的擴容原始碼分析
原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...