1. 程式人生 > >一、JavaSE_集合(集合簡單認識、Collection、List)

一、JavaSE_集合(集合簡單認識、Collection、List)

pos lib 12px lpad wid 認識 order 既然 如何

集合(一)

一、集合的簡單認識

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(最常用)

如有錯誤之處,歡迎指正。

郵箱:[email protected]

一、JavaSE_集合(集合簡單認識、Collection、List)