备注:先列出大纲,再进行逐步研究。
一、HashMap概述
HashMap是基于哈希表的Map接口的非同步的KV数据结构,此类允许null的键和null的值,它不保证映射顺序,特别是不保证该顺序永久不变,新增数据时,将覆盖相同key的数据。
二、HashMap的数据结构
HashMap是由数组+链表组成,在jdk1.8中它是由数组+链表+红黑树组成,其结构如下:
21、HashMap中存放的基础类型
22、如何确定我们存放数据在数组中的位置
23、为什么HashMap中有链表和红黑树,在什么情况下使用它们
24、在什么情况下数组会扩展其容量
25、如何调整可让HashMap获取数据的速度更快,存储的时候效率更高
三、HashMap的put(K,V)方法
四、HashMap的get(K)方法
五、HashMap的resize()方法
基于HashMap的扩展
1、 红黑树
2、 HashCode
3、 Equals
4、 << 、>>、>>>运算
5、 & 、^ 、~、| 位运算
6、 接口和抽象类(Map和AbstractMap)
7、 Transient关键字
8、 泛型
9、 Integer等基础数据类型对应的对象
10、Serializable接口
11、Cloneable 接口
12、serialVersionUID的作用
13、static
13、final
14、内部类,如static class Node<K,V>
15、类似HashMap的同步实现ConcurrentHashMap