思路:我們知道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...