在上一篇集合框架中Map講的不是很詳細宋渔,在實際開發(fā)中,Map的作用還是很大的剂习,所以再來理一理。
Map存儲的是鍵值對(key : value)较沪,一個key對應一個value鳞绕,不允許有重復的key,當你試圖添加一個相同的key的時候尸曼,這個key的value會覆蓋之前的value们何。Map是通過hashCode
判斷和.equals
方法來判斷一個key是否相同的,也就是說控轿,當你put一個新項到Map中冤竹,它會先遍歷這個Map,將每個key和你新put的key進行對比茬射,如果hashCode不相等鹦蠕,那么.equals
方法返回肯定為false,所以可以將這個項put進去在抛;如果hashCode相同钟病,但是.equals
方法的返回值也不一定為true,也就是還要判斷.equals
方法,如果為true肠阱,Map就會認為這個key已經(jīng)存在了票唆,會覆蓋這個key之前的value。所以如果你想在Map中存放一個自定義的對象屹徘,那么這個對象必須要重寫hashCode
和equals
方法走趋。
Map常用方法
-
size() : int
返回Map中元素的個數(shù) -
isEmpty() : boolean
返回一個布爾值,表示這個Map是否為空 -
containsKey(Object) : boolean
返回一個布爾值噪伊,表示這個Map中是否存在一個為Object的key -
containsValue(Object) : boolean
返回一個布爾值奏寨,表示這個Map中是否存在一個為Object的value -
get(Object) : V
返回Object這個key所對應的Value -
put(K, V)
添加一個元素到Map中 -
clear()
清除Map中的元素 -
keySet() : Set
返回一個Set對象理澎,里面包含Map的所有key -
values() : Collection
返回一個實現(xiàn)了Collection的類的對象窖维,里面包含Map中的所有value -
entrySet() : Set
返回一個Set颜武,Set中的每個元素都為entry,每個entry中包含Map的一個Key和對應的Value -
equals() : boolean
用于比較兩個Map是否相等
三個常用實現(xiàn)類
HashMap
HashMap 繼承于AbstractMap拙寡,實現(xiàn)了Map授滓、Cloneable、java.io.Serializable接口肆糕,HashMap是無序的
LinkedHashMap
繼承于HashMap般堆,與HashMap不同的是:LinkedHashMap可以記錄你添加元素的順序,因此它是有序的
TreeMap
繼承于AbstractMap诚啃,類似于TreeSet淮摔,TreeMap也會對元素按照自然順序排序,默認升序始赎。