专栏首页零基础自学Java【Java】基础27: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。

总结:

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【JavaWeb】97:Redis五大数据类型

    因为Redis是非关系型数据库,它是不支持sql语言的,所以其有特有的命令需要我们去学习。

    刘小爱
  • 【Java】基础01:什么是二进制?

    刘小爱
  • 【JavaWeb】68:自己写一个数据库连接池

    也就是将数据库连接放到一个池子里面,需要使用时就去取,这样的话,就不用每次都自己获取连接了。

    刘小爱
  • Java集合中的Map接口

      Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap、T...

    用户1148394
  • java中集合类中Collection接口中的Map接口的常用方法熟悉

    1:Map接口提供了将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map接口中同样提供了集合的常用方法。 2:由于Map集合中的元素...

    别先生
  • Top 6 常见问题关于Java中的Map1 将Map转换成一个List2 遍历map中的键值对3 根据Map的key值排序4 根据Map的value值排序5 初始化一个静态的不可变的Map6 Has

    我们都知道Map是一种键-值对的数据结构,每个键都是唯一的!本文讨论了关于Java中Map使用的最常见的8个问题。为了叙述的简单,所有的例子都会使用泛型。并且本...

    desperate633
  • 【2019年8月】OCP 071认证考试最新版本的考试原题-第25题

    Which three statements are true about defining relations between tables in a rel...

    用户5892232
  • Map.containsKey方法——判断Map集合对象中是否包含指定的键名

    本示例首先使用HashMap类创建Map集合对象,并向集合中添加几个元素,然后调用containsKey方法查询是否包含指定的键名。

    故久
  • Redis常用方法

    我们都知道redis是key,value型就当它是内存数据库把,虽然一般常用于数据缓存,毕竟你往内存中放几千万条数据会弄爆- -(虽然我就是要这么干)  下来,...

    用户3003813
  • 通过一个实际案例,彻底搞懂 HashMap!

    我知道大家都很熟悉hashmap,并且有事没事都会new一个,但是hashmap的一些特性大家都是看了忘,忘了再记,今天这个例子可以帮助大家很好的记住。

    Java技术栈

扫码关注云+社区

领取腾讯云代金券