什么是双列集合?
集合中每次存的数据是成对存入的
以及它的特点是什么?
特别注意:键不可重复,值可以
Map是双列集合的顶层接口
Map
它有哪些方法呢?
Map的常用API
添加
添加操作的代码如下
我们要明白一些细节:
当我们要添加的键是之前集合没有这个键的时候,我们调用该方法,就会在集合中添加这个,同时返回值为null,如上图value1接收的
但是如果我们要添加的键,之前集合元素就已经存在了,那么我们集合就会将新添加的值覆盖掉原先的值,然后返回一个原先的值,
如上图第一次添加韦小宝—沐剑屏,第二次添加韦小宝—双儿,此时韦小宝这个键重复了,然后双儿就会覆盖掉沐剑屏,并且返回一个沐剑屏
删除
这里没什么好说的,就是要知道,这个方法调用后,返回值是,删除的这个键值对的值,并不返回键。
清空
这个就不用多说了,直接调用就行
判断是否包含
这个也不需要多说,就是有两种判断,一种是判断键,一种是判断值,返回值为boolean类型
判断是否为空
获取长度
这两个都很简单,无需多言
Map的遍历
第一种遍历方式(键找值)
见图即懂:
第二种遍历方式(键值对)
这里我们要说一下这段代码
Set<Map.Entry<String,String> entries=map.entrySet();
我们来分析一下:
首先我们很容易看出,这是一个Set系列集合,集合名字是entries
然后我们来看一下等号右边:map是我们定义的一个Map集合的对象,entrySet()是map调用的一个方法,这个方法作用是将map集合的键值对全部存入entries集合中,但是entries集合这个集合的泛型用什么呢?
我们可以看到图中Map.Entry<String,String>这个就是这个集合的泛型,Map是接口,Entry是它的实现类<>这里传入的形参分别是键的类型和值的类型
当然我们也可以在类上面导包import java.util.Map.Entry;
然后写成这样Set<Entry<String,String> entries=map.entrySet();
第三种遍历方法(lambda表达式)
看图好好领悟吧,我也讲不清
HashMap
它作为一个Map的子类,直接调用父类Map的方法就行了
我们主要介绍的是它的特点
从名字我们就可以看出,它的底层用的是哈希表
但是我们要知道,这里哈希值的计算,是只与键有关,与值无关,所以键不能重复,值可以重复
因为都是哈希表底层,所以存储自定义对象时,该重写的还是得重写,和之前的HashSet是一样的
我们在这就再讲一个HashMap的应用
利用Map集合进行统计
如下题
解题方法我就不多讲了,直接上图
LinkedHashMap
这是HashMap的子类,所以也不用学习新的方法
这个和LinkedHashSet也差不多,就是在HashMap的基础上多了个存取数据是有序的就是了
TreeMap
它的基本原理和TreeSet差不多,我们就不多加介绍
介绍一个TreeMap的应用(统计)
题目如下:
解题代码如下
总结