近日參加了一個面試,可是等了三天還沒有接到相關通知,覺得還不錯的我心裏嘀咕了起來,第四天早在地鐵上刷博文,尋思今天看看數據結構吧,突然想起來了關於數據結構的面試問題,
當時回答的比較機智(自認爲 捂臉):
“ 之前也系統的學習和記錄過,太多關注業務,已經有點忘了,但是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[參數];
到此真相大白了。!
附:第一次寫博客哈,留個小尾巴:以前的淺嘗輒止是現在技術瓶頸的根源,以後要多往低層追一追~