简易版的HashMap实现
我们在工作中经常需要使用到HashMap, 但是你了解它的一个工作原理吗?
今天我来实现一个简易版的HashMap
写代码之前先来了解一下HashMap的一个基本原理
首先HashMap的一个基本数据结构, 就是一个数组加链表, 当然,这是1.7之前的结构, 1.8之后, 当链表的长度超过8或等于8之后会转换成红黑树, 可以通过源码可以看出
for (int binCount = 0; ; ++binCount) {
if ((e = p.next) == null) {
p.next = newNode(hash, key, value, null);
//(这里这个判断, 会转红黑树)
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
break;
}
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
p = e;
}
这个是用来判断的常量值
static final int TREEIFY_THRESHOLD = 8;
开始写代码了
1.成员变量部分
前文说了, HashMap是数组, 那我们是不是可以先定义一个数组呢 ? 这个数组存储什么对象呢?
HashMap是一个key-vlaue的结构, 是不是定义一个对象来表示呢? 这个要有什么呢? key, value肯定要有, 如果产生hash碰撞, 是不是要有链表呢?
/**
* 自定义hashmap的数据结构
* @param <K>
* @param <V>
*/
class Entry<K, V> {
<