1. 程式人生 > >【Java總結】——Java8增強的Map集合

【Java總結】——Java8增強的Map集合

前言


Map用於儲存具體有對映關係的資料,因此Map集合裡儲存著兩組值,一組值用於儲存Map裡的key,另外一組值用於儲存Map裡的value,key和value都可以是任何引用型別的資料。Map的key不允許重複,即同一個Map物件的任何兩個key通過equals方法比較總是返回false。

key和value關係


key和value之間存在單向一對一關係,即通過指定的key,總能找到唯一的,確定的value。從Map中取出資料時,只要給出指定的key,就可以取出對應的資料時。
如果把Map的兩組值拆開來看,Map裡的所有key組成了一個set集合(所有的key是沒有順序的,key與key之間不能重複)。
如果把Map裡的所有value放在一起來看,它們類似於一個List,元素與元素之間可以重複,每個元素可以根據索引來查詢,只是Map中的索引不再是整數值,而是以另一個物件作為所用。

HashMap和HashTable


區別
➢Hashtable是一個執行緒安全的Map實現,但是HashMap是執行緒不安全的實現,所以HashMap比Hashtable的效能高一點;但如果有多個執行緒訪問同一個Map物件時,使用Hashtable實現類會更好。
➢Hashtable不允許使用null作為key和value,如果檢視把null值放進Hashtable中,將會引發NullPointerException異常;但是HashMap可以使用null作為key或value。
由於HashMap裡的key不能重複,所以HashMap裡組多隻有一個key-vlaue對的key為null,但可以有無數個key-value對的value為null。
相似


➢HashMap和Hashtable不能保證其中的key-value對的順序;
➢HashMap和Hashtable判斷兩個key相等的標準:兩個key通過equals()方法比較返回true,兩個key的hashCode值也相等;
➢二者判斷兩個value相等的標準:只要兩個物件通過equals()方法比較返回true即可;
➢二者包含一個containsValue()方法,用於判斷是否包含指定的value;

LinkedHashMap


LinkedHashMap使用雙向連結串列維護key-value對的次序(只考慮key的次序即可),該連結串列負責維護Map的迭代順序,迭代順序與key-value對的插入順序保持一致。
LinkedHashMap需要維護元素的插入順序,因此效能略低於HashMap的效能;但它以連結串列來維護內部順序,所有在迭代訪問Map裡的全部元素時將會有較好的效能。

SortedMap介面和TreeMap實現類


TreeMap是一個紅黑樹資料結構,每個key-value對即作為紅黑樹的一個節點。TreeMap儲存key-value對時,需要根據key進行排序。TreeMap可以保證所有的key-value對處於有序狀態。
TreeMap兩種排序方式:
➢自然排序
➢定製排序
TreeMap判斷兩個key相等的標準:兩個key通過compareTo()方法返回0,TreeMap即認為兩個key是相等的。

總結


這裡寫圖片描述