【Java】基础27:Map集合

Map,这个单词很多人都认识,不过第一反应应该是“地图”,其实它还有一个意思叫“映射”。

地图从某种意义上就是映射的意思。

什么叫做映射呢?

地图上的一个点,就对应着现实生活中的一个地方,这种一一对应的关系就叫映射。

在Java里面,Map就是满足这种一一映射关系的集合,也叫双列集合。

前几天学的集合叫Collecion,是单列集合。

Map存储元素是一对一对的存的(就像夫妻一样),所以又叫夫妻集合。

Collecion存储元素是一个个存储的(就像单身狗一样),所以又叫单身狗集合。

好吧,夫妻,单身狗什么的完全是我瞎掰的,不过这样好理解好记忆。

既然要学习Map,那先看看Map集合中的继承关系:

从上到下依次学习,先学Map,再学HashMap。

Map中的元素有什么特点呢?

每一个元素具有两个值:key(键),和value(值)。

key是不能重复的。

value是可以重复的

发现没有,key它就有点类似于索引的存在,它不可能重复,但是value是可以重复的。

一、常用方法

既然是集合,那毫无疑问,最重要的的几个方法无外乎就是:增、删、改、查,以及集合遍历的方法。

①put方法:增加元素、修改元素。

它和我们接触过的add方法非常类似。

其中它还有个额外的作用:如果键值对已经存在了,因为key是不能重复的,就会将对应的value值替换掉,此时,增加元素也就成了修改元素。

其返回值也有不同:

如果是增加元素,会返回null。

如果是修改元素,会将修改的那个元素返回;

②remove方法:删除元素。

根据key值删除对应的元素。

其返回值:该key对应的值。

③get方法:获取元素

根据key值获取对应的值。

返回值:该key值对应的值。

④size方法:map元素数量

存了三对值,元素数量也就是3。

其中还有两个常用方法:keySet方法和entrySet方法

二、Map集合遍历

Map最重要的一个关键要素一定要牢牢记住:

Map集合里面一个元素包含:一个key和一个value,key就叫键,value就叫值,它们合在一起就叫键值对

1.遍历方式一:根据key找value

数组里面是如何遍历的?

一个for循环直接遍历,因为索引是有序的,从0开始依次往后,所以能直接用。

key值就类似于索引,但是它不允许重复,也不是有序的,所以需要先获取集合中所有的key值,再遍历。

①keySet方法:获取集合中的所有key值。

因为Map集合中的key值很多,它返回的也是一个集合,因为key值不可能重复,所以是Set集合。

②增强for循环:

将每一个key遍历出来,再用get根据key值获取对应的value。

2.遍历方式二

该方式的核心思想就是将:一个Map集合转换成一个Set集合。

就是把Map中的key和value当成一个值,也就是键值对(entry)。

Map集合不能直接使用迭代器或者增强for循环进行遍历,但是转成Set之后就可以使用了。

①entrySet方法:获取Map集合中的键值对集合

就相当于把Map集合转换成Set集合。

Set集合怎么遍历?直接增强for循环

②增强for循环遍历Set集合

这样就可以得到集合中所有的键值对。

③getValue方法:获取键值对中的value

从键值对中获取其中的值。

④getKey方法:获取键值对中的key。

从键值对中获取其中的键。

三、HashMap、TreeMap

1.HashMap

HashMap是Map的一个实现类,看它的名字就知道,它的底层结构是哈希表。

那HashSet和HashMap有什么关系呢?

HashMap一个元素有两个值:key和value,其中key不可重复,value可以重复;

HashSet一个元素有一个值,并且这个值能重复。

看出它们的相同点了没有?

其实HashSet就是HashMap,只不过HashSet只使用了HashMap中的key,value底层用其他一个不可变的值代替了。

现在发现Map和Set的区别没有,本质上Set就是Map中key那一列

2.LinkedHashMap

LinkedHashMap,同样的道理,它和LinkedHashSet也是一回事。

LinkedHashMap是HashMap的一个子类,其作用和LinkedHashSet一样,就是元素有先后顺序了。

3.TreeMap

还是一样,TreeMap和TreeSet也是一回事。

TreeSet有何特点:

我们都知道Set它的元素打印出来是无序的,但是TreeSet它的元素又是有序的了,并且默认是升序排序的。

底层是怎么做到的呢?

很简单,还记得昨天学过的比较器么?因为其底层是实现了比较器Comparable接口,所以有了排序规则。

所以因为这个关系,如果是我们自己创建的类,要将类放入TreeSet的话,就得自己实现Comparable接口,并且自定义规则。

TreeMap也是同样的道理,只不过它有序的是key。

总结:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351