集合之List

集合之List

1.介紹

衆所周知List,Set,MAp,前兩個都是繼承了Collection接口,Map爲獨立接口,這篇文章着重講解List接口,的實現類和它們的特點及應用。

List的實現類有哪些?

​ 1.ArrayList

​ 2.Vectior

​ 3.LinkedList

在這裏插入圖片描述

2.ArrayList原理

概念

ArrayList底層是數組實現,ArrayList只不過是對數組的包裝,因爲數組在內存中分配時必須指定長度,

且一旦分配好後便無法再增加長度,ArrayList之所以可以一直往裏添加,是因爲它內部做了處理。存儲

空間連續,當容量達到閾值時會進行自動擴容(數組當前足夠的最小容量 * 1.5),當底層數組填滿後,它會

再分配一個更大的新的數組,把原數組裏的元素拷貝過來,然後把原數組拋棄掉。使用新的數組作爲底

層數組來繼續存儲。

特點

1.查詢快,增刪慢,線程不安全,運行效率高。

2.可以儲存任意類型的元素

3.元素有序,右下標,可重複

4.實現隨機訪問

3.LinkedList原理

概念

LinkedList底層是鏈表實現,長度不固定,因爲內存空間的分配是由操作系統完成的,可以說每次分配的位

置都是隨機的,並沒有確定的規律。所以說鏈表的每個元素都在完全不同的內存地址,上一個元素除了存

儲具體的數據之外,也存儲一份下一個元素在內存中的地址,訪問鏈表元素時,必須從頭一個個遍歷,而

且鏈表越長,位置越靠後,所需花費的時間就越長。所以按索引訪問鏈表元素的時間複雜度就是O(n),

n爲鏈表的長度。也說明了鏈表不支持隨機訪問。所以ArrayList就實現了RandomAccess(隨機訪問)

接口,而LInkedList就沒有。

特點

1.查詢慢,增刪快

2.沒有同步,線程不安全(可以通過Collections.synchronizedList()實現線程安全)

3.底層數據結構是鏈表

4.Vector

介紹

和ArrayList一樣底層是數組實現,在多線程的情況下,線程是安全的,效率低,Vector出現與jdk1.0,繼承了AbstractList類(繼承後可以使用迭代器遍歷),實現了RandomAccess(標記接口,標明實現該接口的list支持快速隨機訪問),cloneable接口(標識接口,合法調用clone方法),serializable(序列化標識接口)。

特點

1.數組實現。

2.可以隨機訪問。

3.線程安全,效率低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章