自我學習原始碼,也借鑑了網上其他的資料,有寫的不準確的地方,請輕噴,謝謝
1)繼承自abstractlist類
2)實現了randomaccess介面,
randomaccess介面是list
實現所使用的標記介面,用來表明其支援快速(通常是固
定時間)隨機訪問。
此介面的主要目的是允許一般的演算法更改其行為,從而在將其應用到隨機或連續訪問列表時能提
供良好的效能。
在對list特別的遍歷演算法中,要盡量來判斷是屬於randomaccess(如arraylist)還是
sequenceaccess(如linkedlist),
因為適randomaccess list的遍歷演算法,用在sequenceaccess list上就差別
很大,即對於實現了randomaccess介面的類例項而言,
此迴圈
for (int i=0, ilist.get(i);的執行速度要快於以下迴圈:
for (iterator i=list.iterator(); i.hasnext(); )容量預設大小是10(從jdk1.2開始),並且有新元素加入時,即呼叫add()後,會呼叫ensurecapacityinternal(int size)來維護陣列的大小,i.next();
在ensurecapacityinternal(int size)中當加入這個元素後如果容量大於當前的容量,則會呼叫grow()來新建乙個新的陣列,並將
之前的資料拷貝到這個新陣列中。
新陣列的容量預設是按照原來陣列的1.5倍大小增加
注意:size不一定等於elementdata.length,只有當size>elementdata.length時才會呼叫grow()
6.arraylist的建構函式
1)無參的建構函式,將空的陣列賦給arraylist物件的屬性elementdata。
2)帶引數的建構函式,引數為初始化的容量,如果引數小於0,則會拋引數不合法的異常,如果大於等於0,則會建立object陣列賦給arraylist物件的屬性elementdata。 3)
這個建構函式通過其他集合類物件來構造arraylist物件,呼叫arrays的靜態方法copyof(這個方法會呼叫底層的本地方法)來構造arraylist物件。
說明:結構改變包括:新增add(e),add(,int,e)、刪除元素remove(int),remove(object)等,或者明確的手動修改陣列大小。如果僅僅的是給乙個元素賦值,不屬於結構的改變。
結構改變有可能會引發的問題:可能會導致iterator報concurrentmodificationexception異常。
原因:當arraylist使用了iterator()方法產生自身對應的iterator來對陣列鍊錶的一些操作,都會通過checkforcomodification()來判斷當前獲得iterator之後,陣列鍊錶是否沒有通過這個iterator來操作
自身,而是通過自身的增加刪除方法來操作。
list list = collections.synchronizedlist(new arraylist(...));**乙個問題:如原始碼所示,abstractlist已經實現了list介面了,但是在arraylist還是再次的
實現了list介面,這是為什麼?
解答:當然這是沒必要寫的,把它去掉也沒什麼大的問題,不過寫了的話,應該有原因的,可以
這麼想:
2.這麼做更明確,更加強調了這個類實現了list介面;
3.向後相容性,如果哪天這個arraylist不再實現list介面了,則arraylist肯定實現list介面,並不會改變。
vue原始碼之Array
目錄 響應式具體實現 陣列子集和新增元素的追蹤 array中的問題 object通過setter改變屬性的值,所以我們利用getter時傳送依賴收集,在setter時觸發依賴更新,而且vue將資料轉換成響應式資料是在資料初始化時,對object中之後的屬性新增和刪除操作,無法做到自動更新,而是通過v...
JAVA原始碼分析Collection之Map
map的底層實現 linkedlist陣列,乙個非常大的陣列,linkedlist中儲存的是myentry物件 包括key和value屬性的物件 因為要保證map中的查詢速度比較快,是基於雜湊演算法來實現的,雜湊的主要實現是依靠hashcode方法。hashcode的產生是基於,記憶體位址產生的,保...
Java原始碼分析之ArrayList
儲存arraylist中的內容 transient object elementdata non private to simplify nested class access 表示元素的數量 private int size transient 關鍵字,就是這部分不參與序列化 建構函式有三個 沒有...