數據結構in Java - ArrayList數據結構淺析

    近日參加了一個面試,可是等了三天還沒有接到相關通知,覺得還不錯的我心裏嘀咕了起來,第四天早在地鐵上刷博文,尋思今天看看數據結構吧,突然想起來了關於數據結構的面試問題,

當時回答的比較機智(自認爲 捂臉):

“ 之前也系統的學習和記錄過,太多關注業務,已經有點忘了,但是ArrayList的低層實現應該是雙向鏈表.

 我的龜龜,這問題就大了啊。。

百度之,!Arraylist是動態數組實現的 !終於知道爲什麼會沒通知了

linkedlist是什麼結構?繼續學習,ArrayList是基於動態數組,LinkedList是基於雙向鏈表,都記反了

那什麼又是動態數組,動態數組和靜態數組的區別?

:C語言上是這麼解釋的,靜態數組是一個特殊指針,一次賦值後無法修改的是靜態數組,靜態數組不能擴容,並且sizeof方法可以獲取到長度。動態數組則可以擴容,並且可以修改長度。

看完之後仍然不夠理解,又查詢了ArrayList源碼,

四個變量:
     private static final int DEFAULT_CAPACITY = 10;//默認長度
     private static final Object[] EMPTY_ELEMENTDATA = {};//空object數組
     private transient Object[] elementData;
     private int size;

三個構造方法:

1 無參構造方法(默認生成長度10的數組) 通過設置變量 elementData=EMPTY_ELEMENTDATA;

2 Collection接口下的實現類轉ArrayList的構造方法,

 通過  elementData = Arrays.copyOf(參數.toArray(), 參數長度, Object[].class);

3 指定容量的構造方法 通過賦值變量elementData=new Object[參數];

到此真相大白了。!

 

附:第一次寫博客哈,留個小尾巴:以前的淺嘗輒止是現在技術瓶頸的根源,以後要多往低層追一追~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章