JAVA:Set/List/Map 集合之Map(三)

一、類型介紹

Java 自帶了各種 Map 類洞坑。這些 Map 類可歸為三種類型:

1. 通用Map盲链,用于在應用程序中管理映射,通常在 java.util 程序包中實現(xiàn)

HashMap迟杂、Hashtable刽沾、Properties、LinkedHashMap排拷、IdentityHashMap侧漓、TreeMap、WeakHashMap监氢、ConcurrentHashMap

2. 專用Map布蔗,通常我們不必親自創(chuàng)建此類Map,而是通過某些其他類對其進行訪問

java.util.jar.Attributes浪腐、javax.print.attribute.standard.PrinterStateReasons纵揍、java.security.Provider、java.awt.RenderingHints议街、javax.swing.UIDefaults

3.?一個用于幫助我們實現(xiàn)自己的Map類的抽象類

AbstractMap

二泽谨、常見的幾個類型的區(qū)別

1?區(qū)別

1.1 基本

HashMap:初始化容量為16,擴容每次為2*oldCap,key-value可以為NULL值

Hashtable:初始化容量為11特漩,擴容每次為2*oldCap+1,key-value不可以為NULL值

TreeMap:初始化容量為0吧雹,內部是紅黑樹結構,不存在hash沖突的情況拾稳,不存在擴容的操作,key-value不可以為NULL值

1.2 實現(xiàn)

HashMap:實現(xiàn)了Map接口吮炕,繼承了AbstractMap類

Hashtable:實現(xiàn)了Map接口腊脱,繼承了AbstractMap類

TreeMap:由于TreeMap是有序的访得,所以其除了實現(xiàn)了Map接口,還實現(xiàn)了SortedMap陕凹、NavigableMap接口

1.3 內部原理

HashMap:HashMap是散列表實現(xiàn)悍抑,內部是數(shù)組+鏈表或者紅黑樹的結構

Hashtable:Hashtable也是散列表實現(xiàn),內部是數(shù)組+鏈表的結構

TreeMap:TreeMap內部是紅黑樹的結構

1.4 線程安全

HashMap:不是線程安全的杜耙,其實通過Map m = Collections.synchronizeMap(hashMap)的方式也可以使得HashMap變成線程安全的搜骡,但是這樣做對程序的性能可能是噩夢,在后面會介紹ConcurrentHashMap佑女,建議在多線程的情況下可以使用ConcurrentHashMap替換HashMap.

Hashtable:是線程安全的记靡,內部方法使用關鍵字synchronized修飾

TreeMap:不是線程安全的

三谈竿、常見用法

void clear() 從此映射中移除所有映射關系(可選操作)。

boolean containsKey(Object key) 如果此映射包含指定鍵的映射關系摸吠,則返回 true空凸。

boolean containsValue(Object value) 如果此映射將一個或多個鍵映射到指定值,則返回 true寸痢。

Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射關系的 Set 視圖呀洲。

boolean equals(Object o) 比較指定的對象與此映射是否相等。

V get(Object key) 返回指定鍵所映射的值啼止;如果此映射不包含該鍵的映射關系道逗,則返回 null。

int hashCode() 返回此映射的哈希碼值献烦。

boolean isEmpty()? 如果此映射未包含鍵-值映射關系滓窍,則返回 true。

Set<K> keySet()? 返回此映射中包含的鍵的 Set 視圖仿荆。

V put(K key, V value) 將指定的值與此映射中的指定鍵關聯(lián)(可選操作)贰您。

void putAll(Map<? extends K,? extends V> m)從指定映射中將所有映射關系復制到此映射中(可選操作)。

V remove(Object key) 如果存在一個鍵的映射關系拢操,則將其從此映射中移除(可選操作)锦亦。

int size() 返回此映射中的鍵-值映射關系數(shù)。

Collection<V> values() 返回此映射中包含的值的 Collection 視圖令境。

四杠园、遍歷

// 1.聲明一個Map?

?Map m=new HashMap();

for(Object obj : map.keySet()){

Object value = map.get(obj);

}


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舔庶,隨后出現(xiàn)的幾起案子抛蚁,更是在濱河造成了極大的恐慌,老刑警劉巖惕橙,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞧甩,死亡現(xiàn)場離奇詭異,居然都是意外死亡弥鹦,警方通過查閱死者的電腦和手機肚逸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彬坏,“玉大人朦促,你說我怎么就攤上這事∷ㄊ迹” “怎么了务冕?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幻赚。 經常有香客問我禀忆,道長臊旭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任箩退,我火速辦了婚禮巍扛,結果婚禮上,老公的妹妹穿的比我還像新娘乏德。我一直安慰自己撤奸,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布喊括。 她就那樣靜靜地躺著胧瓜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郑什。 梳的紋絲不亂的頭發(fā)上府喳,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音蘑拯,去河邊找鬼钝满。 笑死,一個胖子當著我的面吹牛申窘,可吹牛的內容都是我干的弯蚜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼剃法,長吁一口氣:“原來是場噩夢啊……” “哼碎捺!你這毒婦竟也來了?” 一聲冷哼從身側響起贷洲,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤收厨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后优构,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵叁,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年钦椭,在試婚紗的時候發(fā)現(xiàn)自己被綠了拧额。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡玉凯,死狀恐怖势腮,靈堂內的尸體忽然破棺而出联贩,到底是詐尸還是另有隱情漫仆,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布泪幌,位于F島的核電站盲厌,受9級特大地震影響署照,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吗浩,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一建芙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懂扼,春花似錦禁荸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陷嘴,卻和暖如春映砖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灾挨。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工邑退, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劳澄。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓地技,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秒拔。 傳聞我的和親對象是個殘疾皇子乓土,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結構如棧,隊列等,Java集合還可以用于保存具有映射關...
    小徐andorid閱讀 1,946評論 0 13
  • 1 Map集合N016 1.1Map接口 【 ? 實現(xiàn)Map接口的集合類用來存儲"鍵-值"映射對。 ? JDK...
    征程_Journey閱讀 377評論 0 0
  • 12.1 Map集合 Map集合用于保存具有映射關系的數(shù)據(jù)溯警,key和value都可以是任意類型的數(shù)據(jù)趣苏,key不允許...
    王毅巽閱讀 832評論 0 3
  • 前面已經介紹完了Collection接口下的集合實現(xiàn)類,今天我們來介紹Map接口下的兩個重要的集合實現(xiàn)類HashM...
    Ruheng閱讀 10,462評論 2 38
  • 天津啊梯轻,原來叫直沽食磕,是明朝永樂帝給改的名字天津,津呢喳挑,就是渡口的意思彬伦,意為天子的渡口,就叫天津伊诵,當然天津還有...
    9610ab214539閱讀 466評論 2 0