集合之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.線程安全,效率低。