天天看點

Java集合架構 - List接口

List接口

List是有序的Collection。Java List一共三個實作類:分别是ArrayList、Vector和LinkedList。
Java集合架構 - List接口

一、Vector類

特點 :

1. 排列有序,可重複

2. 底層使用數組

3. 擷取元素速度快,增删慢

4. 線程安全,效率低

5. 當容量不夠時,Vector預設擴充一倍容量

和ArrayList不同,Vector中的操作是線程安全的,即某一時刻隻有一個線程能夠寫Vector,避免多線程同時寫而引起的不一緻,但實作同步需要很高的花費,是以,通路它比通路ArrayList慢!

  1. 源碼分析 : ​​List接口 — Vector類源碼分析​​
  2. Vector類中方法的比較 : ​​toArray()和toArray(T[ ] a)的比較 - Vector類​​

二、Stack類

Stack類繼承Vector類

該類通過數組來實作一個堆棧(LIFO:last-in-first-out).類中方法可以實作棧的基本操作.

讀懂了Vector源碼的話,在看Stack類的源碼就so easy!

Stack類隻是封裝了幾個方法.

  1. 源碼分析 : ​​Stack類的介紹​​

三、ArrayList類

特點:

1. 排列有序,可重複

2. 底層使用數組

3. 查找速度快,增删慢

4. 線程不安全

5. 當容量不夠時,ArrayList增加容量為目前容量/2 + 1

差別:

1. 類中的方法與Vector類形式有些類似.

2. 兩個類中,ArrayList類線程是不安全的,是以速度也會比Vector類快.

3. 其中兩者在底層數組擴容也是不同的,ArrayList類的擴容方式更加注重效率,由于添加了一個預設容量數組,進而使在使用空構造函數建立對象時,第一次添加元素時将擴容大小設定為10.

  1. 源碼分析 : ​​List接口 — ArrayList類源碼分析​​
  2. ArrayList類中周遊方式 : ​​ArrayList集合周遊的七種方式​​(其他類相同形式)

四、LinkedList類

特點:

1. 排列有序,可重複

2. 底層使用雙向循環連結清單資料結構

3. 查詢速度慢,增删快

4. 線程不安全

LinkedList是用連結清單結構存儲資料的,很适合資料的動态插入和删除.還提供了List接口中沒有定義的方法,專門用于操作表頭和表尾的元素,可以當作堆棧、隊列和雙向隊列使用.