首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Map集合,为什么又称它为夫妻集合?

【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。

总结:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200511A0E9C000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券