一、JavaSE_集合(集合簡單認識、Collection、List)
集合(一)
一、集合的簡單認識
1.侃一侃
集合,說白了就是存放數據的,還記得OOP當中,我們曾說過,OOP將數據放在第一位,然後再考慮操作數據的算法。也就是研究數據的存儲方式,或者說是數據結構,咱先不談數據結構那些東西。集合用來存放數據,會有不同的存儲數據的方式,如數組,集合。那集合和數組有什麽區別呢?
區別 | ||
數組 |
1.數組既可以存儲基本數據類型,又可以存儲引用數據類型,基本數據類型存儲的是值,引用數據類型存儲的是地址值。 2.數組長度是固定的,不能自動增長 |
|
集合 |
1.集合只能存儲引用數據類型(對象),集合中也可以存儲基本數據類型,但是在存儲的時候會自動裝箱變成對象。 2.集合的長度的是可變的,可以根據元素的增加而增長 |
看了上圖想必就知道什麽時候用數組什麽時候用集合了吧~
數組:當元素固定時,那麽就推薦使用數組。
集合:當元素不固定時,那麽就推薦使用集合。
2.來個初步認識(集合體系結構)
菜來了,上圖:
圖中反映了各個集合的特點,正如我們在燒鍋做飯的時候采用不同的工具一樣,不同的碗和碟子有不同的作用。
接下來我們重點談談List。
Collection是單列集合的根接口,圖中,他有兩個子接口。一個是List,一個是Set。今天主要分析List,也就是ArrayList,LinkedList,以及Vector(了解)。
List是一個存放有序的集合,可以存儲重復。我們來看這一句代碼,List list = new ArrayList();
List接口指向子類的具體實現,而ArrayList存放的就是有序的集合,會隨著存放元素的增大而增大。同樣,LinkedList也是一樣,那麽LinkedList和ArrayList有什麽區別呢?
要想知道區別,那就得知道他們底層是怎麽實現的?把上面那個圖表格化一下。
ArrayList | 底層是用數組實現的 |
LinkedList | 底層使用鏈表實現的 |
一個是數組實現,一個是鏈表實現。
數組有什麽特點:數組查詢修改快,因為根據索引去查一步到位;增加和刪除慢,因為增加刪除都要移動索引。
鏈表有什麽特點:鏈表刪除和增加快,但是查詢和修改比較慢
數組 |
* 查詢,修改快 * 增加,刪除慢 |
鏈表 |
* 查詢,修改慢 * 增加,刪除快 |
二、List集合三個子類的特點
1.
特點 | ||||
ArrayList |
|
|||
LinkedList | 底層數據結構是鏈表,查詢慢,增刪快。 線程不安全,效率高。 |
|||
Vector | 底層數據結構是數組,查詢快,增刪慢。 線程安全,效率低。 |
2.
Vector相對ArrayList查詢慢(線程安全的)
Vector相對LinkedList增刪慢(數組結構)
3.Vector和ArrayList的區別:
Vector是線程安全的,效率低
ArrayList是線程不安全的,效率高
共同點:都是數組實現的
4.ArrayList和LinkedList的區別:
ArrayList底層是數組結果,查詢和修改快
LinkedList底層是鏈表結構的,增和刪比較快,查詢和修改比較慢
共同點:都是線程不安全的
5.既然List有三個子類,那麽我們應該如何去選擇呢?
查詢多用ArrayList
增刪多用LinkedList
如果都多ArrayList(最常用)
如有錯誤之處,歡迎指正。
一、JavaSE_集合(集合簡單認識、Collection、List)