Java ArrayList 內部原始碼實現

2021-07-11 11:47:15 字數 1970 閱讀 4141

今天看了下arraylist 的原始碼  原本以為內部會比較複雜  但是沒想到內部原始碼很簡單。。。 在這裡簡要記錄下吧  相信只要看過原始碼 就能看懂。。

繼承和實現了以下介面和類  

public class arraylistextends abstractlistimplements cloneable, serializable, randomaccess

成員變數  只有3個  

private static final int min_capacity_increment = 12;   //最小的增長容量
int size;   //當前集合的元素數量

transient object array; //真正存放資料的陣列

三個建構函式:

public arraylist(int capacity) 

array = (capacity == 0 ? emptyarray.object : new object[capacity]);

}public arraylist()

public arraylist(collection<? extends e> collection)

object a = collection.toarray();

if (a.getclass() != object.class)

array = a;

size = a.length;

}

下面來看看最常用的幾個方法  add  get  remove 

@override public boolean add(e object) 

a[s] = object; //賦值元素

size = s + 1; //大小加1

modcount++; //修改次數增加

return true;

}

@override public void add(int index, e object) 

if (s < a.length) else

a[index] = object; //把要插入的值 插入

size = s + 1;

modcount++;

}

@suppresswarnings("unchecked") @override public e get(int index) 

return (e) array[index];

}

@override public e remove(int index) 

@suppresswarnings("unchecked") e result = (e) a[index];

system.arraycopy(a, index + 1, a, index, --s - index);

a[s] = null; // prevent memory leak

size = s;

modcount++;

return result;

}

下面看一下最重要的乙個方法 

public static native void arraycopy(object src, int srcpos, object dst, int dstpos, int length); 

第乙個引數是 資源物件  第二個引數是要複製的開始位置  第三個引數是目標物件  第四個引數是目標物件開始的位置  最後乙個是  要複製的長度  

也就是  把src中的從srcpos位置開始 複製 length哥元素到  dst的dstpos位置到 dstpos+length-1位置  

這就ok了。。。真的挺簡單。。

Java ArrayList擴容機制

底部採用動態陣列實現資料增加,刪除。size arraylist的實際存放資料個數,即我們常說的list長度,size 函式 elementdate elementdate,arraylist實際存放資料的陣列,可動態擴容,我們所說的就是動態改變elementdate.length,從而達到擴容,實...

java ArrayList原始碼學習

該類繼承於abstractlist,裡面對於資料和結構的操作如下。trimtosize 更新size,如果size小於 陣列的 lenth,則更新size的大小。public void ensurecapacity int mincapacity 確保容量,如果不夠就擴容成原來的1.5倍 1 pub...

Java ArrayList原始碼分析

private static final int default capacity 10 transient object elementdata 擴容函式 private void grow int mincapacity public static native void arraycopy o...