02.03 ArrayList 源碼解析之架構

對於每一個開發者來說,ArrayList每天我們都會使用到,但是討論到底層原理,有不少人對源碼的細節不瞭解,這樣在使用時會遇到瓶頸。本節就和大家一起探討ArrayList整體架構。

1.ArrayList架構

ArrayList的架構比較簡單,是一個數組結構,如下圖:

ArrayList 源碼解析之架構

ArrayList架構圖

上圖是一個長度為10的數組,從1開始計數。index表示數組的下標,從0開始計數。element是數組元素本身。

ArrayList 源碼解析之架構

ArrayList整體類圖

上圖是ArrayList類圖,從圖中可以清楚的看到ArrayList的繼承依賴關係。

ArrayList的其他特性

  • DEFAULT_CAPACITY 表示數組的初始化大小,默認是10,如下圖:
ArrayList 源碼解析之架構

ArrayList默認大小(源碼)

  • modCount 統計當前數組被修改的版本次數,如果數組結構有變動,modCount +1,如下圖:
ArrayList 源碼解析之架構

modCount (源碼)

modCount在ArrayList中執行++操作發生在很多處,即只要數組結構有變動,modCount就會+1,modCount定義在ArrayList繼承的AbstractList類裡面,如下圖:

ArrayList 源碼解析之架構

modCount定義(源碼)

從上圖中可以看到,modCount的定義就是為了檢測數組結構變化的,如果你細心點可以發現modCount使用了關鍵字transient修飾,這裡對transient進行一下掃盲。

transient關鍵字我們常用來修飾類變量,意思是當前變量是無需進行序列化的。在序列化時,就會忽略該變量,這些在序列化工具底層,就已經對 transient 進行了支持

  • size 表示當前數組的大小,如下圖:
ArrayList 源碼解析之架構

size大小(源碼)

size是ArrayList的大小,它包含的是元素的數量。

2.數組

因為在ArrayList架構的底層就是數組,所以在這裡對數組這種數據結構做一個簡單的介紹

數組這種數據結構相信你不管接觸哪種編程語言,數組都是你要學習的一種數據結構。相對於其他數據結構,數組也是比較簡單的一種數據結構,但是如果我們從原理上去研究數組,數組是有很多設計理念值得我們去研究的。

數組特性:

數組的下標是以0開始的,既數組中第n個元素的下標是n-1。如下圖所示:

ArrayList 源碼解析之架構

數組結構

Java中數組的簡單使用:

下面介紹在Java中數組的簡單使用,如下圖:

ArrayList 源碼解析之架構

Java中數組的簡單使用

在實際的使用中,數組的所以可以分為兩類:

有語意的索引:

數組的索引代表實際的業務意義;

無語意的索引:數組的索引只是簡單的下標,沒有實際的業務意義。

其實大部分人在實際開發中,基本上不會去考慮數據是不是有語意,只是簡單的使用。我們知道,數組的最大優點就是能夠快速定位查詢,但是快速查詢的基礎就是使用索引。所以,在實際的使用中,最好使用數組有語意的場景。如果使用有語意數組解決不了當前問題,那麼可能選擇其他的數據結構會是更好的選擇。

本節主要分享了ArrayList的整體架構,考慮到我們看文章基本都是手機端,所以對於文章的篇幅我都不會寫特別長,每一個知識點都會分為幾個篇幅去分享,最後形成系列性文章。瞭解更多文章歡迎關注微信公眾號《編程之藝術》。


分享到:


相關文章: