ArrayList 源碼解析之架構

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

1. ArrayList架構

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

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

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

ArrayList的其他特性

  • DEFAULT_CAPACITY 表示數組的初始化大小,默認是10,如下圖:

從源碼中可以看到,ArrayList的默認初始化空間是10,這個數字得記下。

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

 

從源碼中可以看到,ArrayList的默認初始化空間是10,這個數字得記下。

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

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

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

  • size 表示當前數組的大小,如下圖:

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

2. 數組

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

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

數組特性:

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

Java中數組的簡單使用:

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

 代碼:


package com.study.base.demo.entity;

/**
 * <p>Title: Main</p>
 * <p>Description: 數組的簡單使用</p>
 * <p>Company: http://www.yinjiedu.com</p>
 * <p>Project: base</p>
 *
 * @author: WEIQI
 * @Date: 2020-2-3 0:06
 * @Version: 1.0
 */
public class Main {
    public static void main(String[] args) {

        // 創建數組,給數組賦值
        int[] array = new int[20];
        for (int i = 0; i < array.length; i++) {
            array[i] = i;
        }

        // 數組另一種創建並賦值
        int[] heights = new int[] {168, 178, 169, 177};
        for (int height : heights) {
            System.out.println(height);
        }
    }
}

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

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

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

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

 想要了解實時博文,可以關注公衆號《編程之藝術》

發佈了109 篇原創文章 · 獲贊 103 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章