深入學習java集合 ArrayList實現

2021-07-12 03:31:08 字數 2233 閱讀 3173

1、arraylist類圖

arraylist是list介面的可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 list 介面外,此類還提供一些方法來操作內部用來儲存列表的陣列的大小。

每個arraylist例項都有乙個容量,該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列表的大小。隨著向arraylist中不斷新增元素,其容量也自動增長。自動增長會帶來資料向新陣列的重新拷貝,因此,如果可預知資料量的多少,可在構造arraylist時指定其容量。在新增大量元素前,應用程式也可以使用ensurecapacity操作來增加arraylist例項的容量,這可以減少遞增式再分配的數量。

注意,此實現不是同步(執行緒安全)的。如果多個執行緒同時訪問乙個arraylist例項,而其中至少乙個執行緒從結構上修改了列表,那麼它必須保持外部同步。

2、arraylist構造實現以及重要方法

對於arraylist而言,它實現list介面、底層使用陣列儲存所有元素。其操作基本上是對陣列的操作。下面我們來分析arraylist的源**:

1)底層使用陣列實現:

private transient object elementdata;   // 注意transient

關鍵字

2)構造器

arraylist提供了三種方式的構造器,可以構造乙個預設初始容量為10的空列表、構造乙個指定初始容量的空列表以及構造乙個包含指定collection的元素的列表,這些元素是按照該collection的迭代器返回它們的順序排列的。

public arraylist(int initialcapacity)

public arraylist()

public arraylist(collection extends e> c)

3)get(index: int): e    讀取元素方法

// 返回此列表中指定位置上的元素。

public e get(int index)

4)set(index: int, element: e): e  設定元素方法

// 用指定的元素替代此列表中指定位置上的元素,並返回以前位於該位置上的元素。

public e set(int index, e element)

5)add(e: e): boolean 新增元素方法

// 將指定的元素新增到此列表的尾部。

public boolean add(e e)

6)remove(index: int): e   刪除元素方法

// 移除此列表中指定位置上的元素。

public e remove(int index)

7)ensurecapacity(mincapacity: int): void 調整陣列容量方法

從上面介紹的向arraylist中儲存元素的**中,我們看到,每當向陣列中新增元素時,都要去檢查新增後元素的個數是否會超出當前陣列的長度,如果超出,陣列將會進行擴容,以滿足新增資料的需求。陣列擴容通過乙個公開的方法ensurecapacity(int mincapacity)來實現。在實際新增大量元素前,我也可以使用ensurecapacity來手動增加arraylist例項的容量,以減少遞增式再分配的數量。可以看到,調整大小時每次增加原來大小的一半。

public void ensurecapacity(int mincapacity) }

private void ensurecapacityinternal(int mincapacity)

ensureexplicitcapacity(mincapacity); }

private void ensureexplicitcapacity(int mincapacity)

private void grow(int mincapacity)

8) sublist(fromindex: int, toindex: int): list返回列表子檢視方法

//返回sublist類物件,在該物件中記錄了父列表,以及索引區間,sublist只是父list的子檢視,修改子list檢視會同步的修改父list。

public listsublist(int fromindex, int toindex)

sublist(abstractlistparent,

int offset, int fromindex, int toindex)

UIApplication深入學習

新建乙個任意型別的ios應用工程,加入我們在class prefix輸入是tc,我們可以看到工程中生成乙個類 在main函式中,autoreleasepool 函式中 說明 當應用程式將要入非活動狀態執行,在此期間,應用程式不接收訊息或事件。比如來 了。說明 當應用程式入活動狀態執行,這個剛好跟上面...

深入學習CSS

什麼是css?在之前的這篇文章中已經介紹了初步的介紹,詳細請看 div加css進一步講解了css中的內容,先總結如下圖 其實在實際開發中,我們通常採用是外部樣式的匯入,這樣做的好處是對於很對有同樣設計樣式的頁面可以實現樣式的共享,這樣我們不僅僅可以節省了大量的時間,並且也方便我們可以靈活的呼叫的樣式...

block深入學習

block的宣告和使用看上一節就行了。本章主要講block內部的實現過程及原理。block的定義和函式指標非常相似 對比一下 block定義 void someblock 函式指標定義 void functionpionter void functionname 當然區別還是有的,block的返回型...