1、什么是Map?
Map是继承于collection的一种集合。Map是用于存储多个Key-Value的集合。
2、为什么会出现Map?
由于我们在存储数据时,有时候会有一些,我通过某个值能需要都能拿到对应的数据的需求。比如我知道一个学生的名字,我是刚来的老师,我想通过名字就能对应上这个学生的所有信息。那么我采用什么形式来存储这个班级的学生信息比较好呢,用list的话,那么每次都需要取出学生对象拿到学生对象的名字对比,比较麻烦,这种是比较适合map的结构了,key是学生姓名,value存储学生对象。
3、Map的特点
a、存储结构为k-v型。
b、key不能为null。
4、线程安全问题
对于一个集合类来说,他的添加方法都会有多线程异常的隐患存在,那么对于map来说,有什么子类是线程安全的么?
List中的线程安全的类有很多,比较重要的是hashtable和ConcurrentHashMap,以及线程安全包装类。
5、hashtable实现线程安全的原理
hashtable是线程安全的map,是源于他的所有方法都是被sync锁住的,因此都是同步的方法,因此是线程安全,不过也正因为如此他的性能也比较低。
6、ConcurrentHashMap 实现线程安全的原理
ConcurrentHashMap是基于CAS 实现的reentrantlock来实现的,这是一种乐观锁的实现方式,在后续的多线程中会详细描述。