为了加深对JDK HashMap的理解,决定自我实现个HashMap。虽不能做到如JDK源码那般细节复杂,但也基本摸清了HashMap的原理流程,也算是融汇贯通。
HashMap以键值对的方式存储数据,数据结构可理解为“链表的数组”。通过插入元素key值的hashcode和自带的hash算法决定元素的存储位置,发生hash冲突则在此节点下拉一个二元组链表,依次比较链表中的key是否与插入元素key相同,相同则覆盖,都不同则在链表起始点插入该新元素。
1 //首先是Entry类
2
3 public class Entry<K,V> {
4
5 final K key;//key一旦指定就不可改变
6
7 V value;
8
9 Entry<K,V> next;//指向下一元素的“指针”
10
11 public Entry(K key, V value, Entry<K,V> next) {
12
13 this.key = key;
14
15 this.value = value;
16
17 this.next = next;
18
19 }
20
21 }
22
23
24
25 //这里省略了负载因子、扩容等操作,如需了解请查看JDK源码
26
27 public class MyHashMap<K,V> {
28
29 private static final INITIAL_CAPACITY = 16;//默认容量
30
31 private int size;//
32
33 private Entry<K,V>[] table;//array buffer 链表的数组
34
35 public MyHashMap(int size) {
36
3