ArrayList底層原始碼學習

2021-09-30 17:22:11 字數 2725 閱讀 3224

主要為add, get, set, remove, indexof,陣列擴容等內容的學習。

擴容:

擴容前提:size==elementdata.length,也就是元素個數達到了陣列容器的長度。

建立新的更大空間的(如size*2+1)陣列物件,

object newarray = new object[size*2+1]

遍歷原來陣列元素,複製到新陣列中,在將這個新陣列重新賦值給同名字的elementdata。

public object grow()
add (element):直接呼叫上方的內部類的私有方法add

public boolean add(e e)
add (index, element):先擴容,然後將index位置到最後的元素,全部往後挪乙個位置,也就是複製到index+1,在將目標元素放入到陣列index位置處,size++。

public boolean add(int index, e element)
2、get

get實際上就是用index從陣列中取值

public object get(int index)
3、remove

原理就是將index+1到最後的元素,往前挪乙個位置,最後乙個元素設為null,size-1。

public e remove(int index)
4、set

這個簡單,直接將陣列index位置處,賦值為目標元素。

public boolean set(int index, e e)
5、indexof

其實遍歷陣列,用equals來判斷是否存在目標元素,有就返回對應 i,沒有就返回-1.

public int indexof(object obj)

public int indexofrange(object obj, int start, int end) ;

public arraylistaddpra()

public arraylistaddpra(int initialcapacity) else if (initialcapacity == 0) else catch (exception e)

} }

public int size()

private void add(e e, object obj, int s)

public boolean add(e e)

public object grow() catch (exception e)

} }public static void main(string args) {

arraylistaddpra list = new arraylistaddpra();

list.add("aaa");

list.add("bbb");

list.add(123);

list.add(new pandas());

list.add(new string("one string"));

system.out.println("######### add(element) test #############");

for (int i=0; i結果:

######### add(element) test #############

aaabbb

123cn.sxt.oop.datastructure.pandas@368239c8

one string

size: 5

######### add(index,element) test #############

aaalibao

bbb123

cn.sxt.oop.datastructure.pandas@368239c8

one string

size: 6

######### set(index, element) test #############

aaa111

bbb123

cn.sxt.oop.datastructure.pandas@368239c8

one string

size: 6

######### remove(index) test ###########

111bbb

123cn.sxt.oop.datastructure.pandas@368239c8

one string

size: 5

######### indexof(obj) test ############

index of 123: 2

index of bbb: 1

######### 擴容 test #############

111bbb

123cn.sxt.oop.datastructure.pandas@368239c8

one string12

3456

78910

size: 15

ArrayList底層原始碼

arraylist的屬性 private static final int default capacity 10 預設初始容量的大小 private static final object empty elementdata 空陣列,用於有參構造時引數為零的例項 private static fi...

ArrayList底層原始碼實現練習

created by chengbx on 2018 5 17.自己實現乙個arraylist,幫助我們更好的理解arraylist的底層結構!一句話概括arraylist的底層 陣列的擴容與資料的拷貝!public class cbxarraylist public cbxarraylist in...

ArrayList原始碼分析

arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...