集合框架(上)

1.爲什麼要用集合框架?

如果我需要存儲一組總數不缺定的數據,就需要用到集合框架,因爲如果用一維數組的話,在不能確定數組長度的情況下,如果長度定義多了,浪費空間,定義少了,位置不夠,所以集合框架就可以很好的解決這個問題

2.集合框架的應用場景

Java集合框架提供了一套性能優良、使用方便的接口和類。Collection、List、Set等都是接口,但是接口無法直接使用,必須要尋找對應的接口實現類(implements)。
在這裏插入圖片描述

2.1-Collcetion接口

Collection接口可以用來存儲一組不唯一(可重複),無序(存儲時沒有順序)的數據。
在這裏插入圖片描述

2.2-List接口

List接口可以用來存儲一組不唯一有序(存儲時有順序,先存的在前面,後存的在後面)的對象。
在這裏插入圖片描述
在這裏插入圖片描述
ArrayList:實現了長度可變的數組,在內存中分配連續的空間,遍歷元素和隨機訪問元素的效率比較高。由於ArrayList是實現自List,而List又繼承自Collection接口,那麼Collection接口的通用方法也能被ArrayList所使用。
在這裏插入圖片描述
在這裏插入圖片描述
LinkedList:採用鏈表存儲方法,插入、刪除元素時效率比較高。LinkedList也是List實現類,List裏的API它也有
在這裏插入圖片描述
在這裏插入圖片描述
ArrayListLinkedListList區別
List時集合列表接口,ArrayList和LinkedList都是List接口的實現類。
ArrayList是動態數組順序列表,順序表的存儲地址是連續的,所以查找塊,但是插入和刪除時由於需要把其它的元素順序移動,所以耗時更多。
LinkedList是雙向鏈表的數據結構,同時實現了雙端隊列Deque接口,鏈表節點的存儲地址是不連續的,每個存儲地址通過指針關聯,在查找時需要進行指針遍歷節點,所以查找比較慢,但是在插入刪除時比較快。

2.3-Set接口

Set接口可以用來存儲一組唯一(不可重複),無序(存儲時沒有順序)的對象。

在這裏插入圖片描述

3.ArrayList和LinkedList的區別

ArraysList:底層是數組結構,所以因爲是數組,則擁有索引,在遍歷或隨機查找時比較快,但是又因爲是數組,而數組長度不可變,索引每一次增刪都要創建新的數組。
LinkedList:底層是鏈表結構,每一個元素由兩部分組成,數據域和指針域,它沒有索引。多個元素之間,通過指針域指向連接。因爲沒有索引所以查找慢,但是因爲是鏈表所以在增刪時只需要切換指針指向即可。