目录
一.Map
1.1 Map集合概述
1.2 Map集合体系
1.3 Map集合体系特点
1.4 Map集合实现类特点
1.5 Map集合的API
1.6 Map集合的遍历方式
1.6.1 键找值的方式遍历
1.6.2 键值对的方式遍历
1.6.3 Lambda表达式的方式
1.7 HashMap
1.7.1 HashMap的特点
1.7.2 底层原理
1.7.3 注意事项
1.8 LinkedHashMap
1.8.1 特点
1.8.2 原理
1.8.3 注意事项
1.9 TreeMap
1.9.1 特点
1.9.2 排序规则
1.9.3 底层原理
1.9.4 注意事项
二.集合的嵌套
三.不可变集合
3.1 什么是不可变集合
3.2 不可变集合的作用
3.3 如何创建不可变集合
一.Map
1.1 Map集合概述
Map集合是一种双列集合,每个元素包含二个数据。
非常适合购物车这类业务场景。
1.2 Map集合体系
1.3 Map集合体系特点
1. Map集合的特点都是由键决定的
2. Map集合的键是无序、不重复、无索引的、值不作要求。
3. Map集合后面重复的键对应的值会覆盖前面重复键的值。
4. Map集合的键值对都可以为null。
1.4 Map集合实现类特点
1.HashMap:元素是按照键无序、不重复、无索引,值不做要求。
2.LinKedHashMap:元素是按照键有序、不重复、无索引,值不做要求。
3.TreeMap:元素是按照键排序、不重复、无索引,值不做要求。
1.5 Map集合的API
Map集合是双列集合的祖宗接口,它的功能是全部双列集合都可以继承使用的。
1.6 Map集合的遍历方式
1.6.1 键找值的方式遍历
1. 先获取Map集合的全部键的Set集合
2. 遍历键的Set集合,然后通过键提取对应值。
键找值涉及到的API:
1.6.2 键值对的方式遍历
1. 先把Map集合转换成Set集合,Set集合中的每个元素都是键值对实体类型了。
2. 遍历Set集合,然后提取键以及提取值。
键值对遍历涉及到的API
1.6.3 Lambda表达式的方式
得益于JDK8开始的新技术Lambda表达式,提供了一种更简单更直接的遍历方式。
Lambda表达式遍历涉及到的API
1.7 HashMap
1.7.1 HashMap的特点
无序、不重复、无索引。
1.7.2 底层原理
HashMap的底层原理和HashSet是一样的,都是哈希表,所以元素的增删改查性能都很好。
1.7.3 注意事项
1. Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。
2. 依赖equals和hashcode方法保证键的唯一。
3. 如果键要存储的是自定义对象,需要在对象中重写equals和hashcode方法。
1.8 LinkedHashMap
1.8.1 特点
有序、不可重复、无索引。
1.8.2 原理
同LinkedHashSet一样,底层数据结构依然是哈希表,只是每个键值对元素又多了一个双链表的机制记录存储的顺序。元素的增删改查性能也很好。
1.8.3 注意事项
同HashMap
1.9 TreeMap
1.9.1 特点
排序,不可重复,无索引
1.9.2 排序规则
具有值特性的数据默认按照键升序排序。
自定义类型的对象有二种方式排序:
1. 类实现Comparable接口,重写比较规则。
2. 集合自定义Comparator比较器对象,重写比较规则。
1.9.3 底层原理
同HashSet一样,底层是红黑树,所以元素的增删改查性能很好。
1.9.4 注意事项
TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进行排序
二.集合的嵌套
就是集合中的元素也是集合。
三.不可变集合
3.1 什么是不可变集合
不可变集合就是不可被修改的集合,集合的元素在创建的时候提供,并且在整个生命周期中不可改变,否则报错。
3.2 不可变集合的作用
1. 如果某个数据不可被修改,把他防御性的拷贝到集合中是个很好的实践。
2. 当集合对象被不可信的库调用时,不可变形式是安全的。
3.3 如何创建不可变集合
在List、Set、Map接口中都存在of方法,可以创建一个不可变的集合,这个集合不能增删改。