如果我需要存儲一組總數不缺定的數據,就需要用到集合框架,因爲如果用一維數組的話,在不能確定數組長度的情況下,如果長度定義多了,浪費空間,定義少了,位置不夠,所以集合框架就可以很好的解決這個問題
Java集合框架提供了一套性能優良、使用方便的接口和類。Collection、List、Set等都是接口,但是接口無法直接使用,必須要尋找對應的接口實現類(implements)。
Collection接口可以用來存儲一組不唯一
(可重複),無序
(存儲時沒有順序)的數據。
List接口可以用來存儲一組不唯一
,有序
(存儲時有順序,先存的在前面,後存的在後面)的對象。
ArrayList:實現了長度可變的數組,在內存中分配連續的空間,遍歷元素和隨機訪問元素的效率比較高。由於ArrayList是實現自List,而List又繼承自Collection接口,那麼Collection接口的通用方法也能被ArrayList所使用。
LinkedList:採用鏈表存儲方法,插入、刪除元素時效率比較高。LinkedList也是List實現類,List裏的API它也有
ArrayList
、LinkedList
、List
區別
List時集合列表接口,ArrayList和LinkedList都是List接口的實現類。
ArrayList
是動態數組順序列表,順序表的存儲地址是連續的,所以查找塊
,但是插入和刪除時由於需要把其它的元素順序移動,所以耗時更多。
LinkedList
是雙向鏈表的數據結構,同時實現了雙端隊列Deque接口,鏈表節點的存儲地址是不連續的,每個存儲地址通過指針關聯,在查找時需要進行指針遍歷節點,所以查找比較慢,但是在插入
和刪除
時比較快。
Set接口可以用來存儲一組唯一
(不可重複),無序
(存儲時沒有順序)的對象。
ArraysList
:底層是數組結構,所以因爲是數組,則擁有索引,在遍歷或隨機查找時比較快,但是又因爲是數組,而數組長度不可變,索引每一次增刪
都要創建新的數組。
LinkedList
:底層是鏈表結構,每一個元素由兩部分組成,數據域和指針域,它沒有索引。多個元素之間,通過指針域指向連接。因爲沒有索引所以查找慢,但是因爲是鏈表所以在增刪時只需要切換指針指向即可。