Map 源碼閱讀(未完善)

Map 源碼注釋

開始的第一行就直接說明了 Map 每一個(gè) Key 對(duì)應(yīng)一個(gè) Value 然后 Key 是不允許重復(fù)的。他是一個(gè)完全抽象的類而不是一個(gè)接口卧惜,它代替類 Dictionary 類雇盖。Map 接口提供了三個(gè)集合視圖忿等,允許 map 的內(nèi)容被視為一組鍵栖忠、值的集合崔挖,或一組鍵值的映射贸街。Map 的順序被定義為 Map 集合視圖上的迭代器返回其元素的順序。一些 Map 的實(shí)現(xiàn)狸相,比如 TreeMap 類薛匪,對(duì)它們的順序做了特定的保證;而例如 HashMap 類脓鹃,則沒有逸尖。

Note:如果可變對(duì)象被用作 Map 的鍵,則必須非常小心瘸右。如果對(duì)象的值以影響 equals 比較的方式改變娇跟,而對(duì)象是映射中的鍵,則不會(huì)指定映射的行為太颤。這種禁令的一個(gè)特例就是地圖不能包含自己作為關(guān)鍵字苞俘。但是允許映射包含自己的值,但是要特別小心:在此類映射上龄章, equals 和 hashCode 方法不再被很好地定義吃谣。

所有實(shí)現(xiàn)了 Map 接口的具有一般用途的類都應(yīng)該提供兩種“標(biāo)準(zhǔn)”的構(gòu)造函數(shù):(1)一個(gè)用來創(chuàng)造一個(gè)空的 Map 的無參構(gòu)造函數(shù)(void constructor);(2)一個(gè)帶有 Map 類型的單個(gè)參數(shù)的構(gòu)造函數(shù)做裙,它創(chuàng)建一個(gè)具有與其參數(shù)相投的 鍵-值 映射的新映射岗憋。實(shí)際上,后者的構(gòu)造函數(shù)允許用戶復(fù)制任何 Map锚贱,生成所需類的等價(jià) Map仔戈。雖然 Map 沒有辦法執(zhí)行這個(gè)建議(因?yàn)榻涌诓荒馨瑯?gòu)造函數(shù)),但是 JDK 中的所有通用映射實(shí)現(xiàn)都符合拧廊。

如果 Map 不支持這個(gè)操作杂穷,即包含在這個(gè)接口中“破壞性”的方法,也就是修改它們所在的 Map 的方法卦绣,那么就會(huì)指定拋出一個(gè) UnSupportedOperationException異常耐量。如果是這種情況,調(diào)用這些方法(但不是必須的)對(duì) Map 沒有影響可能拋出一個(gè) UnSupportedOperationException異常滤港。例如廊蜒,在不可修改的映射上調(diào)用 putAll(Map),如果映射的“疊加”映射是空的溅漾,可能(但不是必須)拋出異常山叮。

實(shí)現(xiàn) Map 接口的一些類對(duì)它們可能包含的鍵和值有限制。例如添履,一些可能會(huì)禁止空的 Key 和 values屁倔,一些會(huì)限制它們 keys 的類型。試圖插入一個(gè)不合格的 key 或 value 會(huì)拋出一個(gè)未經(jīng)檢查的異常暮胧,一般是
NullPointerException 或 ClassCastException锐借。試圖查詢一個(gè)不合格的 key 和 value 的存在可能會(huì)拋出一個(gè)異常问麸,或是簡單的返回 false。一些實(shí)現(xiàn)將展現(xiàn)前者的行為钞翔,一些將展現(xiàn)后者的行為严卖。一般來說,嘗試對(duì)不合格的鍵值來進(jìn)行操作布轿,其操作的完成不會(huì)導(dǎo)致將不合格的元素插入到映射中可能會(huì)引發(fā)異常哮笆,或者可能會(huì)成功執(zhí)行。這個(gè)例外在這個(gè)接口的規(guī)范中被標(biāo)記為“可選的”汰扭。

集合框架接口中的許多方法是根據(jù)等效方法定義的稠肘,例如,{@link #containsKey(Object)containsKey(Object key)}方法的規(guī)范說:“返回true”當(dāng)且僅當(dāng)這個(gè)映射包含一個(gè)關(guān)鍵字的映射 (key == null萝毛?k == null:key.equals(k))启具。這個(gè)規(guī)范不應(yīng)該被解釋為暗示用一個(gè)非空參數(shù)<key>調(diào)用 Map.containsKey 會(huì)導(dǎo)致key.equals( k)被調(diào)用的任何鍵 k 。實(shí)現(xiàn)可以自由地實(shí)現(xiàn)優(yōu)化珊泳,從而避免了 equals 調(diào)用鲁冯,例如通過首先比較兩個(gè)鍵的哈希碼。({@link Object#hashCode()}規(guī)范保證了哈希碼不相等的兩個(gè)對(duì)象不能相等色查。)更一般地說薯演,各種集合框架接口的實(shí)現(xiàn)可以自由地利用實(shí)現(xiàn)者認(rèn)為適當(dāng)?shù)娜魏蔚讓臃椒ǖ闹付ㄐ袨椤?br>
執(zhí)行映射遞歸遍歷的某些映射操作可能會(huì)失敗,并且映射直接或間接包含自身的自我引用實(shí)例秧了。這包括clone()跨扮,equals(),hashCode()和toString()方法验毡。實(shí)現(xiàn)可以選擇處理自引用場景衡创,然而大多數(shù)當(dāng)前的實(shí)現(xiàn)不這樣做。

  • @author Josh Bloch
  • @see HashMap
  • @see TreeMap
  • @see Hashtable
  • @see SortedMap
  • @see Collection
  • @see Set

Map 的函數(shù)(public interface Map<K,V>)

查詢操作

int size():返回此映射中鍵值的映射數(shù)量,如果超過 Integer.MAX_VALUE 則返回 Integer.MAX_VALUE

boolean isEmpty():如果此映射不包含鍵值映射晶通,則返回 true

boolean containsKey(Object key):如果這個(gè)映射包含指定鍵的映射璃氢,則返回 true

boolean containsValue(Object value):如果此映射將一個(gè)或多個(gè)鍵映射到指定的值,則返回 true狮辽。

V get(Object key):返回指定的鍵映射到的值一也;如果此映射不包含鍵的映射,則返回 null

修改操作

V put(K key,V value):將指定的值與此 Map 中指定的鍵相關(guān)聯(lián)(可選操作)喉脖。如果 Map 以前包含一個(gè)映射鍵椰苟,則舊值被指定的值替換.

V remove(Object key):如果存在,則從該映射中除去該映射

批量操作

void putAll(Map<?extends K,? extends V> m):將指定映射的所有映射復(fù)制到此映射树叽。 m 映射被存儲(chǔ)在這個(gè)映射中舆蝴。

void clear():從該映射中刪除所有映射,執(zhí)行該方法后,Map 將為空洁仗。

查看(Views)

Set<K> keySet():返回一個(gè)包含在此映射中的鍵的集合視圖.

Collection<V> values():返回該 Map 中包含的值的集合視圖

Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射的 Set視圖

interface Entry<K,V>

Map.entrySet 方法返回地圖的集合視圖层皱,其元素是這個(gè)類的。獲取對(duì) Map 條目的引用的唯一方法是從這個(gè)集合視圖的迭代器中獲取京痢。

每個(gè) Map.Entry 其實(shí)就是一個(gè) key-value 對(duì).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市篷店,隨后出現(xiàn)的幾起案子祭椰,更是在濱河造成了極大的恐慌,老刑警劉巖疲陕,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件方淤,死亡現(xiàn)場離奇詭異,居然都是意外死亡蹄殃,警方通過查閱死者的電腦和手機(jī)携茂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诅岩,“玉大人讳苦,你說我怎么就攤上這事》郧” “怎么了鸳谜?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長式廷。 經(jīng)常有香客問我咐扭,道長,這世上最難降的妖魔是什么滑废? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任蝗肪,我火速辦了婚禮,結(jié)果婚禮上蠕趁,老公的妹妹穿的比我還像新娘薛闪。我一直安慰自己,他們只是感情好俺陋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布逛绵。 她就那樣靜靜地躺著,像睡著了一般倔韭。 火紅的嫁衣襯著肌膚如雪术浪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天寿酌,我揣著相機(jī)與錄音胰苏,去河邊找鬼。 笑死醇疼,一個(gè)胖子當(dāng)著我的面吹牛硕并,可吹牛的內(nèi)容都是我干的法焰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倔毙,長吁一口氣:“原來是場噩夢啊……” “哼埃仪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陕赃,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤卵蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后么库,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傻丝,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年诉儒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葡缰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忱反,死狀恐怖泛释,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情温算,我是刑警寧澤胁澳,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站米者,受9級(jí)特大地震影響韭畸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔓搞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一胰丁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喂分,春花似錦锦庸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梆掸,卻和暖如春扬卷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酸钦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工怪得, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓徒恋,卻偏偏與公主長得像蚕断,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子入挣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一径筏、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,261評(píng)論 0 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理葛假,服務(wù)發(fā)現(xiàn),斷路器匠璧,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法桐款,類相關(guān)的語法咸这,內(nèi)部類的語法夷恍,繼承相關(guān)的語法,異常的語法媳维,線程的語...
    子非魚_t_閱讀 31,630評(píng)論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等酿雪,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,497評(píng)論 0 3
  • 感恩天地滋養(yǎng),宇宙永恒侄刽;感恩大自然無私的愛指黎;感恩祖先傳承,歷代宗親護(hù)佑州丹;感恩國泰民安醋安,繁榮昌盛;感恩父母生養(yǎng)大恩墓毒,...
    天門金珠瑜伽閱讀 398評(píng)論 0 1