1. 程式人生 > >java三大集合框架(面試知識儲備精華篇)

java三大集合框架(面試知識儲備精華篇)

java三大集合框架 :  set  list   map


如上圖 set list 都屬於collection的子介面(collection為頂層介面) Map 不屬於collection介面

Set介面:  

無序可變的陣列,不允許新增重複元素,如果檢視把兩個相同的元素加入到同一個集合中,add方法返回false.

set判斷物件是否相同使用equals方法, 就是說返回true就表示兩個物件相同 set不會接受.

HashSet:

不能保證元素的排列順序,

不是同步的(執行緒不安全)

集合元素可以是null,但只能放入一個null

當向HashSet集合中存入一個元素時,HashSet

會呼叫該物件的HashCode()方法來得到該物件的HashCode值,然後根據HashCode值來決定該物件在HashSet中的儲存位置.

判斷兩個HashSet元素相等的標準是兩個物件通過equals方法比較相等,並且兩個物件的HashCode()方法返回值相等

如果要一個物件放入HashSet中,重寫該物件對應類的equals方法,也應該重寫HashCode()方法.

LinkedHashSet:

LinkedHashSet集合同樣是根據HashCode()方法來決定元素的儲存位置,但是它同時使用連結串列維護元素的次序.這樣使得元素看起來像是以插入順序儲存的,當遍歷該集合的時候,LinkedHashSet將會以元素的新增順序訪問集合的元素.

LinkedHashSet在迭代訪問Set中的全部元素時,效能比HashSet好,但是插入時效能稍遜色於HashSet.

TreeSet:

TreeSet是SortedSet介面的唯一實現類,TreeSet可以確保集合元素處於排序狀態。

TreeSet支援兩種排序方式,自然排序 和定製排序,其中自然排序為預設的排序方式。
TreeSet判斷兩個物件不相等的方式是兩個物件通過equals方法返回false,或者通過CompareTo方法比較沒有返回0

自然排序:
自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關係,然後將元素按照升序排列。
Java提供了一個Comparable介面,該接口裡定義了一個compareTo(Object obj)方法,該方法返回一個整數值,實現了該介面的物件就可以比較大小。
obj1.compareTo(obj2)方法如果返回0,則說明被比較的兩個物件相等,如果返回一個正數,則表明obj1大於obj2,如果是 負數,則表明obj1小於obj2。
如果我們將兩個物件的equals方法總是返回true,則這兩個物件的compareTo方法返回應該返回0
定製排序:


自然排序是根據集合元素的大小,以升序排列,如果要定製排序,應該使用Comparator介面,實現 int compare(T o1,T o2)方法

List介面:

一個 List 是一個元素有序的、可以重複、可以為 null 的集合(有時候我們也叫它“序列”)
ArrayList:代表長度可以改變得陣列。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢。
LinkedList:在實現中採用連結串列資料結構。插入和刪除速度快,訪問速度慢。 

Vector:Vector與ArrayList一樣,也是通過陣列實現的,不同的是它支援執行緒的同步,即某一時刻只有一個執行緒能夠寫Vector,避免多執行緒同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。

補充:ListIterator(list特有的迭代器)提供了對List的雙向遍歷的方法。

Queue介面:暫時不討論感興趣的同學可以自行查詢


Map介面:

Map是一種把鍵物件和值物件對映的集合,它的每一個元素都包含一對鍵物件和值物件。 Map沒有繼承於Collection介面 從Map集合中檢索元素時,只要給出鍵物件,就會返回對應的值物件。 

HashTable:類實現一個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。為了成功地在雜湊表中儲存和獲取物件,用作鍵的物件必須實現 hashCode 方法和 equals 方法。

HashMap:Map基於散列表的實現。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設定容量capacity和負載因子load factor,以調整容器的效能。 

LinkedHashMap: 類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用連結串列維護內部次序。 

TreeMap:基於紅黑樹資料結構的實現。檢視“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在 於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。 

相關知識:

迭代器(Iterator)
提供一種方法訪問一個容器(container)物件中各個元素,而又不需暴露該物件的內部細節。
對於遍歷一個容器中所有的元素,Iterator模式是首選的方式
Collection定義了Iterator<E> iterator()方法,子類都各自實現了該方法,我們直接呼叫即可
Map中雖沒有定義,我們可以利用map.entrySet()的iterator()方法