ArrayList原始碼學習

2022-09-22 01:06:07 字數 2913 閱讀 1360

//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...