前言:講講什麼是集合框架?集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容:對外的介面、介面的實現和對集合運算的演算法。
沒學集合框架之前我們儲存多個資料是採用陣列實現的,但是我們要建立陣列的話先要初始化陣列容量
int arr =new int[10];現在設定陣列預設容量為10,當我們要向陣列儲存11個資料的話將會丟擲
這個時候我們就要使用集合框架了 list 集合框架介面:
集合框架結構圖
一,list介面
list介面中儲存元素的特點:publicinte***ce listextends collection {}
list中儲存的元素實現類排序,而且可以重複的儲存相關元素。
(1)arraylist:
優點:操作讀取操作效率高,基於陣列實現的,可以為null值,可以允許重複元素,有序,非同步。
缺點:由於它是由動態陣列實現的,不適合頻繁的對元素的插入和刪除操作,因為每次插入和刪除都需要移動陣列中的元素。
(2)linkedlist:
優點:linkedlist由雙鏈表實現,增刪由於不需要移動底層陣列資料,其底層是鍊錶實現的,只需要修改鍊錶節點指標,對元素的插入和刪除效率較高。
缺點: 遍歷效率較低。hashmap和雙鏈表也有關係。
arraylist成員變數
//linkedlist成員變數:版本號,不用管
private
static
final
long serialversionuid = 8683452581122892189l;
//陣列預設的初始容量
private
static
final
int default_capacity = 10;
//用於建立乙個空的例項
private
static
final object empty_elementdata ={};
//用於儲存list資料的陣列
private
transient
object elementdata;
//陣列大小
private
int size;
//二,你肯定會想到為什麼linkedlist為什麼刪除和插入效率高和arraylist遍歷效率高用於記錄集合的數量
transient
int size = 0;
//集合的第一項
transient nodefirst;
//集合的最後一項
transient nodelast;
先看看linkedlist底層使用雙鏈表實現:
雙鏈表圖
雙鏈表是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。所以刪除和插入元素只需要修改鍊錶節點指標就可以了,不像arraylist一樣,arraylist底層使用陣列實現的,每一次刪除或修改陣列都會移動元素。
arraylist的底層實現:
arraylist底層由陣列實現,在例項化乙個arraylist時沒給予建構函式陣列個數引數,集合中的陣列預設是10的容量,在呼叫add方法時如果容量已滿,會將陣列的容量擴大1.5倍的容量
三,迴圈遍歷使用for效率高還是foreacn(增強式for迴圈)高?
1,使用for適合迴圈arraylist以及陣列,當大批量的迴圈linkedlist時程式將會卡死,for適合迴圈陣列結構,通過下標去遍歷。
2,使用foreach適合迴圈linkedlist,使用雙鏈表結構實現的應當使用foreach迴圈。
第一次寫部落格不足之處請指正,謝謝
深入理解List集合框架底層原理的實現
前言 此篇文章講解arraylist和linkedlist底層實現原理 for和foreach遍歷集合哪個效率會更高一些!講講什麼是集合框架?集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容 對外的介面 介面的實現和對集合運算的演算法。沒學集合框架之前我們儲存...
深入理解springboot日誌框架
一 springboot預設日誌框架 我們先檢視一下springboot專案的日誌jar包依賴 二 springboot日誌架構的切換 接下來介紹日誌框架的切換,以logback切換成log4j為例,我們看一下springboot官方提供的日誌使用圖 檢視右上角的流程,可以看出,我們面向slf4j ...
list 集合框架
集合框架中提供了乙個內部類專門操作集合中的元素,這個內部類就是迭代器 資料結構 集合框架的由來 資料多了用物件進行儲存,物件多了用集合來進行儲存。而儲存資料的方式 資料結構 各有不同,所以儲存的容器也就有多種,從而形成了集合框架這一體系。集合父類 list介面 集合子類 arraylist vect...