主要為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進行結...