通过对Hashmap的源码分析,我们可以看到JDK7的Hashmap实际上是由数组和链表联合构成的。
而通过我的理解认为,他在这个版本之所以能够有效率,是因为他汲取了数组和链表的优点。
正如我们普遍所理解的一样,数组是一种查询快,插入慢的数据结构,而链表恰恰相反,链表是一种查询慢,但插入很快的数组,正因如此,Hashmap综合了两个的优点。
我们需要知道的是,我们所说的意义上的数组也并不是要插入我们需要插入数据类型的数组,而数组中存放的是对插入数据的那条链表的引用。
首先我们需要得到的是我们开始所要创建的hashmap的长度(即数组的长度)。当不是2的幂次方时,在内部会更改到比他大的最小的2的幂次方。
当我们需要向hashmap中插入数据时,我们需要通过散列生成的hashcode,再通过其中 indexfor() 得到我们需要插进数组的下标,然后通过头插法将数据插入到链表当中。
这时候就涉及到扩容问题,而扩容问题就需要提到两个变量,负载因子和阈值,阈值的大小由最大当前数组的最大容量和负载因子相乘得到。当当前数组的数据量已经达到了阈值,就会触发扩容机制。
另外需要注意,这个版本的hashmap并发时会出现问题,出现元素之间可能出现循环链表的问题
具体的源码分析会在JDK8的里面写出来