(15)Map集合-HashMap

Map接口不屬于Collection的繼承或?qū)崿F(xiàn)瞄摊,Map接口是維護(hù)鍵值對(duì)的,并且不能有重復(fù)的鍵苦掘,但是在Map的底層是用Set來(lái)存的换帜,所以在存入Map中的映射對(duì)的鍵對(duì)應(yīng)的類型必須重寫(xiě)equals跟hashcode方法,一般常用String類型作為Map的key鹤啡,Map接口的常用實(shí)現(xiàn)類有:HashMap惯驼,LinkedHashMap,TreeMap递瑰,Properties

1.1HashMap

HashMap是基于哈希表的Map接口實(shí)現(xiàn)的祟牲,因此它內(nèi)部的鍵是通過(guò)Set散列存放,所以根據(jù)鍵去查的效率非常高抖部,并且允許null鍵null值说贝,但是不保證映射順序,下面用代碼顯示:
public static void main(String[] args) {

HashMap hashMap=new HashMap();

? ? hashMap.put("1","張三");

? ? hashMap.put("2","李四");

? ? hashMap.put("6","王五");

? ? hashMap.put("4","趙六");

? ? hashMap.put("0","尼瑪");

??? hashMap.put("4","趙六");

? ? System.out.println("原始的元素"+hashMap);

? ? //得到全部鍵慎颗,內(nèi)部的鍵是跟Set存的乡恕,因此獲得的鍵是Set型

? ? Set set = hashMap.keySet();

? ? Iterator iterator=set.iterator();

? ? while (iterator.hasNext()){

System.out.println("通過(guò)所有的鍵來(lái)得到所有的值:"+hashMap.get(iterator.next()));

? ? }

}

結(jié)果顯示:
原始的元素{0=尼瑪, 1=張三, 2=李四, 4=趙六, 6=王五}???? //內(nèi)部有hash的算法順序

通過(guò)所有的鍵來(lái)得到所有的值:尼瑪

通過(guò)所有的鍵來(lái)得到所有的值:張三

通過(guò)所有的鍵來(lái)得到所有的值:李四

通過(guò)所有的鍵來(lái)得到所有的值:趙六

通過(guò)所有的鍵來(lái)得到所有的值:王五

注:結(jié)果是以大括號(hào)括住,鍵在左俯萎,值在右傲宜,無(wú)序不重復(fù)


Map集合中value()方法與keySet()、entrySet()區(qū)別

在Map集合中

values():方法是獲取集合中的所有的值----沒(méi)有鍵夫啊,沒(méi)有對(duì)應(yīng)關(guān)系函卒,

KeySet():

將Map中所有的鍵存入到set集合中。因?yàn)閟et具備迭代器撇眯。所有可以迭代方式取出所有的鍵报嵌,再根據(jù)get方法虱咧。獲取每一個(gè)鍵對(duì)應(yīng)的值。 keySet():迭代后只能通過(guò)get()取key?

entrySet():

Set<Map.Entry<K,V>>

entrySet() //返回此映射中包含的映射關(guān)系的 Set 視圖沪蓬。

Map.Entry表示映射關(guān)系彤钟。entrySet():迭代后可以e.getKey(),e.getValue()取key和value跷叉。返回的是Entry接口逸雹。

下面通過(guò)例子看看:

Map<String,String> map = new HashMap<String,String>();

map.put("01", "zhangsan");

map.put("02", "lisi");

map.put("03", "wangwu");

Collection<String> collection = map.values();//返回值是個(gè)值的Collection集合

System.out.println(collection);

打印結(jié)果:

[zhangsan, lisi, wangwu]

Set<K> keySet() //返回值是個(gè)只存放key值的Set集合(集合中無(wú)序存放的)

Set<Map.Entry<K,V>> entrySet() //返回映射所包含的映射關(guān)系的Set集合(一個(gè)關(guān)系就是一個(gè)鍵-值對(duì)),就是把(key-value)作為一個(gè)整體一對(duì)一對(duì)地存放到Set集合當(dāng)中的云挟。


一. keySet()方式梆砸。

Map<String,String> map = new HashMap<String,String>();

? ? ? ? map.put("01", "zhangsan");

? ? ? ? map.put("02", "lisi");

? ? ? ? map.put("03", "wangwu");

? ? ? ? Set<String> keySet = map.keySet();//先獲取map集合的所有鍵的Set集合

? ? ? ? Iterator<String> it = keySet.iterator();//有了Set集合,就可以獲取其迭代器园欣。

? ? ? ? while(it.hasNext()){

? ? ? ? ? ? ? ? String key = it.next();

? ? ? ? ? ? ? ? String value = map.get(key);//有了鍵可以通過(guò)map集合的get方法獲取其對(duì)應(yīng)的值帖世。

? ? ? ? ? ? ? ? System.out.println("key: "+key+"-->value: "+value);//獲得key和value值

? ? ? ? ? ? ? ? }

二. entrySet()方式:

Map map = new HashMap();

map.put("01", "zhangsan");

map.put("02", "lisi");

map.put("03", "wangwu");

//通過(guò)entrySet()方法將map集合中的映射關(guān)系取出(這個(gè)關(guān)系就是Map.Entry類型)

Set> entrySet = map.entrySet();

//將關(guān)系集合entrySet進(jìn)行迭代,存放到迭代器中

Iterator> it2 = entrySet.iterator();

while(it2.hasNext()){

? ? ? ? Map.Entry<String, String> me = it2.next();//獲取Map.Entry關(guān)系對(duì)象me

? ? ? ? String key2 = me.getKey();//通過(guò)關(guān)系對(duì)象獲取key

? ? ? ? String value2 = me.getValue();//通過(guò)關(guān)系對(duì)象獲取value

? ? ? ? System.out.println("key: "+key2+"-->value: "+value2);

}

雖然使用keyset及entryset來(lái)進(jìn)行遍歷能取得相同的結(jié)果

但兩者的遍歷速度是有差別的

keySet():迭代后只能通過(guò)get()取key?

entrySet():迭代后可以e.getKey()沸枯,e.getValue()取key和value日矫。返回的是Entry接口?

說(shuō)明:keySet()的速度比entrySet()慢了很多,也就是keySet方式遍歷Map的性能不如entrySet性能好

為了提高性能绑榴,以后多考慮用entrySet()方式來(lái)進(jìn)行遍歷哪轿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翔怎,隨后出現(xiàn)的幾起案子窃诉,更是在濱河造成了極大的恐慌,老刑警劉巖赤套,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飘痛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡容握,警方通過(guò)查閱死者的電腦和手機(jī)宣脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唯沮,“玉大人脖旱,你說(shuō)我怎么就攤上這事〗轵龋” “怎么了萌庆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)币旧。 經(jīng)常有香客問(wèn)我践险,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任巍虫,我火速辦了婚禮彭则,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘占遥。我一直安慰自己俯抖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布瓦胎。 她就那樣靜靜地躺著芬萍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搔啊。 梳的紋絲不亂的頭發(fā)上柬祠,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音负芋,去河邊找鬼漫蛔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旧蛾,可吹牛的內(nèi)容都是我干的莽龟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锨天,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轧房!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起绍绘,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迟赃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纤壁,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡左刽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年狂打,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗤无。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迟隅。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砰诵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抽米,到底是詐尸還是另有隱情云茸,我是刑警寧澤懊纳,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站宜岛,受9級(jí)特大地震影響长踊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萍倡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一身弊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧列敲,春花似錦阱佛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至所意,卻和暖如春淮逊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扶踊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工泄鹏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秧耗。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓备籽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親分井。 傳聞我的和親對(duì)象是個(gè)殘疾皇子车猬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • Map 今天的主要內(nèi)容 Map接口概述 Map集合的兩種遍歷方式通過(guò)鍵找值keySet通過(guò)鍵值對(duì)對(duì)象獲取鍵和值涉及...
    須臾之北閱讀 251評(píng)論 0 0
  • 一、為什么會(huì)出現(xiàn)集合類 1.集合是一個(gè)容器尺锚,為了方便的對(duì)多個(gè)對(duì)象進(jìn)行操作珠闰。 2.集合容器同數(shù)組容器的...
    大禹編程扛把子閱讀 564評(píng)論 0 0
  • 實(shí)際上,HashSet 和 HashMap 之間有很多相似之處瘫辩,對(duì)于 HashSet 而言铸磅,系統(tǒng)采用 Hash 算...
    曹振華閱讀 2,508評(píng)論 1 37
  • 高漸離X雪女 “站住赡矢,你聽(tīng)我說(shuō)≡淖校” 易水河畔吹散,琴聲縹緲,紛紛細(xì)雪似柳絮飄搖八酒。 一個(gè)人在雪中彈琴空民,另外一個(gè)人在雪中知...
    舟自衡閱讀 2,416評(píng)論 5 4
  • 他醒來(lái)時(shí)天還不亮,起身上了趟廁所羞迷,初秋時(shí)節(jié)界轩,蚊子還很惡,廁所在院子里衔瓮,回到屋里發(fā)現(xiàn)屁股上被咬了幾個(gè)疙瘩浊猾,很癢,撓著...
    約翰馬爾克斯閱讀 178評(píng)論 0 0