1. 程式人生 > >java中集合的學習與總結

java中集合的學習與總結

集合與陣列:

陣列:長度固定,可以儲存基本型別。

集合:長度可變,不能儲存基本型別(只能儲存物件)。

集合類框架圖:

 

Collection介面是集合類的根介面,Java中沒有提供這個介面的直接的實現類。但是卻讓其被繼承產生了兩個介面,就是SetListSet中不能包含重複的元素。List是一個有序的集合,可以包含重複的元素,提供了按索引訪問的方式

MapJava.util包中的另一個介面,它和Collection介面沒有關係,是相互獨立的,但是都屬於集合類的一部分。Map包含了key-value對。Map不能包含重複的key,但是可以包含相同的value

Iterator,所有的集合類,都實現了

Iterator介面,這是一個用於遍歷集合中元素的介面,主要包含以下三種方法:

1. hasNext()是否還有下一個元素。2.next()返回下一個元素。3.remove()刪除當前元素。

兩個主要的集合類介面:

List:實現了collection介面的介面;元素可以重複,元素有序,使用索引可以找到元素。

Set:實現了collection介面的介面;元素不可以重複,元素無序,只能通過遍歷查詢元素。

幾個主要的List實現類:

ArrayList:內部使用陣列來儲存元素,每次擴容,會增加0.5倍的長度。(最適合查詢)

LinkedList:內部使用連結串列來儲存元素。(最適合頻繁的增刪)

Vector:執行緒安全。內部使用陣列來儲存元素,每次擴容,會增長

1倍的長度。

幾個主要的Set實現類:

HashSet:內部使用HashMapkey來儲存資料,value都是相同的預設值。

LinkedHashSet:內部使用LinkedHashMap來儲存資料。繼承自HashSet

TreeSet:內部使用TreeMap來儲存資料。沒有繼承HashSet,有很多自己獨有的導航方法。

幾個主要的Map實現類:

HashMap:內部使用HashTable來儲存資料;通過HashCode來確定key在雜湊陣列中的位置,然後再用equals方法確定該位置的單向連結串列中又沒有該key,從而保證key唯一;因此,key可以為null,但只能有一個null

HashTable

  陣列的特點是:定址容易,插入和刪除困難;

  而連結串列的特點是:定址困難,插入和刪除容易。

  那麼我們能不能綜合兩者的特性,做出一種定址容易,插入刪除也容易的資料結構?答案是肯定的,這就是我們要提起的雜湊表,雜湊表有多種不同的實現方法,我接下來解釋的是最常用的一種方法——拉鍊法,我們可以理解為“連結串列的陣列”,如圖:

 

LinkedhashMap:內部使用帶雙向連結串列的HshTable來儲存資料,就是說在原來基礎的HashTable上,每個元素又多了afterbefor兩個成員來維護雙向連結串列的結構,通過這個雙向連結串列結構來維護元素插入的順序。

帶雙向連結串列的HashTable

  本質上,HashMap和雙向連結串列合二為一即是LinkedHashMap。所謂LinkedHashMap,其落腳點在HashMap,因此更準確地說,它是一個將所有Entry節點鏈入一個雙向連結串列雙向連結串列的HashMap。在LinkedHashMapMap中,所有put進來的Entry都儲存在如下面第一個圖所示的雜湊表中,但由於它又額外定義了一個以head為頭結點的雙向連結串列(如下面第二個圖所示),因此對於每次put進來Entry,除了將其儲存到雜湊表中對應的位置上之外,還會將其插入到雙向連結串列的尾部。

 

 

以上兩者結合起來,就是linkedHashMap了。

 

每一個節點的示意圖:

 

TreeHashMap:內部使用紅黑樹來儲存資料;儲存的物件,必須實現compareTo方法,或者,建立TreeHashMap物件時,實現一個Comparable介面作為引數傳入構造方法中。

紅黑樹插入刪除比較複雜,下圖簡單展示一下查詢方法。