概述
常用方法
遍历方式
Map集合的遍历方式
- 键找值:先获取Map集合全部的键,再通过遍历键来找值
- 键值对:把“键值对“看成一个整体进行遍历(难度较大)
- Lambda:JDK1.8开始之后的新技术(非常的简单)
1.键找值
2.键值对
键值对是如何实现遍历的:
一旦Map集合调用entrySet()方法(就是把Map集合转换成键值对类型的Set集合)就会把Map集合中的每个键和值都封装成一个所谓的entry对象,每个entry对象里面就会包含一个元素的键和值,一旦把键和值封装成一个entry对象了,此时这个entry对象就肯定存在具体的元素类型,也就是Map的entry类型(也叫Map的实体类型),键是String值是Double,这个整体作为一个数据类型。接着entry方法的内部还会继续把这些键值对对象放到一个Set集合里边去,Set集合中的每个元素类型也就是键值对类型(也就是Map.entry<String,Double>),最后这个entry方法内部会把Set集合返回给我们。集合中每个元素有类型了,自然也就能使用增强for循环遍历这个集合了。遍历这个集合的时候元素类型就填Map.entry<String,Double>类型,代表的是键值对类型。
我们可以使用entry变量去遍历Set集合中每一个键值对对象了;entry还提供了getKey()来获取键以及getValue()来获取值。
3.Lambda
其实还是map集合调用forEach方法
案例:统计投票人数
HashMap
HashMap(由键决定特点):无序、不重复、无索引。(用的最多)
HashMap集合的底层原理
- HashMap跟Hashset的底层原理是一一样的,都是基于哈希表实现的。
实际上:原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据而已
HashSet集合里面包装的是HashMap集合。
哈希表
- JDK8之前,哈希表=数组+链表
- JDK8开始,哈希表=数组+链表+红黑树
- 哈希表是一种增删改查数据,性能都较好的数据结构。
LinkedHashMap
LinkedHashMap (由键决定特点):由键决定的特点:有序、不重复、无索引。
LinkedHashMap集合的原理
- 底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。
实际上:原来学习的LinkedHashset集合的底层原理就是LinkedHashMap。
TreeMap
TreeMap (由键决定特点):按照大小默认升序排序、不重复、无索引。
- 特点:不重复、无索引、可排序(按照键的大小默认升序排序,只能对键排序)
- 原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序
TreeMap集合同样也支持两种方式来指定排序规则
- 让类实现Comparable接口,重写比较规则。
- TreeMap集合有一个有参数构造器,支持创建Comparator比较器对象,以便用来指定比较规则。
补充知识:集合的嵌套
指的是集合中的元素又是一个集合。