手工實現ArrayList

2021-09-27 13:09:55 字數 3108 閱讀 4374

思路:我們知道arraylist底層是陣列,所以當我們建立arraylist物件時就是呼叫空構造器,讓構造器來幫我們建立好乙個長度為10(自己擬定的長度)的陣列,然後我們可以呼叫內部提供的各種發放來操作arraylist,所以讓我們自己來手寫乙個arraylist。

**第一步:**讓我們由簡單到難分布完成,先寫乙個只有增加的而且沒有范型的arraylist。

package 手工實現arraylist;

/** * 手工實現arraylist

* */

public

class

hwarraylist

/** * 增加方法

* @param obj

*/public

void

add(object obj)

/** * 為了輸出保持與原本一樣,重寫了tostring

*/@override

public string tostring()

sb.setcharat

(sb.

length()

-1,']');

return sb.

tostring()

;}public

static

void

main

(string[

] args)

}

第二步:給add方法增加自動擴容,我們知道arraylist不需要宣告長度,使用為內部可以判斷長度是否滿,如果滿則自動擴容,而擴容說明白了就是建立乙個新的且容量比原陣列大的陣列,然後將舊陣列的內容拷貝到新陣列,且還多餘出來了位置,再將新陣列賦值給舊陣列,這樣就實現了自動擴容。

重點看add方法::::

package 手工實現arraylist;

/** * 手工實現arraylist

* */

public

class

hwarraylist

/** * 增加方法

* @param obj

*/public

void

add(object obj)

//如果陣列長度沒滿則按照原來方法加入資料

elementdate[size++

]=obj;

//呼叫增加方法其實就是給這個陣列加值

}/**

* 為了輸出保持與原本一樣,重寫了tostring

*/@override

public string tostring()

sb.setcharat

(sb.

length()

-1,']');

return sb.

tostring()

;}public

static

void

main

(string[

] args)

}

接下來就是手寫中,其餘方法的擴充 :ection(int index)判斷索引是否合法發放remove(int index)給以索引來清除對應值remove(e element)給乙個值去查詢有沒有如果有就刪除

其中重點看看remove(index)方法,過程很簡單,給乙個index,先判斷索引是否合法,如果合法:依舊是對陣列進行copy,只不過,先想法算出拷貝的長度,計算方法是:elementdate.length-index-1,

不會的可以拿紙算一算,有了拷貝長度以後就可以對陣列進行copy,就是將index+1的值拷貝到index上

**如下:

package 手工實現arraylist;

/** * 手工實現arraylist

* */

public

class

hwarraylist

/*** 增加方法

* @param obj

*/public

void

add(e obj)

//如果陣列長度沒滿則按照原來方法加入資料

elementdate[size++

]=obj;

//呼叫增加方法其實就是給這個陣列加值

}//刪除方法

public

void

remove

(int index)

elementdate[size-1]

=null;

size--;}

/** * 給值刪除

* @param element

*/public

void

remove

(e element)}}

/** * 判斷索引是否在陣列範圍內

* @param index

*/public

void

ection

(int index)

}/**

* set方法

* @param element

* @param index

*/public

void

set(e element,

int index)

/** * get方法

* @param index

* @return

*/public e get

(int index)

/** * 為了輸出保持與原本一樣,重寫了tostring

*/@override

public string tostring()

sb.setcharat

(sb.

length()

-1,']');

return sb.

tostring()

;}public

static

void

main

(string[

] args)

}

手工實現ArrayList

package cn.yishan.mycollection 自定義實現乙個arraylist,體會底層原理 author yishan public class sxtarraylist01 public sxtarraylist01 int capacity public void add ob...

手工實現乙個Arraylist類

public class xjharraylist public xjharraylist int capacity else public void add e e elementdata size e size從0開始自加 先賦值否則應該是 size override public string...

手工實現LinkedList

參照其底層 按照自己的理解實現了linkedlist的一些基本功能。如果對c和c 指標了解一下,理解起來非常快。package cn.liu.mylinkedlist 結點 public class node 構造器,來傳資料 public node object element package c...