一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet
关于HashMap的源码是这样定义的
其中的Cloneable和Serializable接口在前面的 ArrayList源码解读有讲解
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
HashMap继承了AbstractMap
并实现Map
接口
HashMap的内容比较多,方便更好的解读源代码,先对HashMap进行内部结构的简化
请先看我另一篇文章对HashMap的注释和简化,方便记忆
文章传送 ==》简化HashMap
在JDK1.2源码的数据结构
jdk1.2中HashMap底层是链表+数组
真正存储数据的结构如下
private transient Entry table[];//数组
private static class Entry implements Map.Entry {
int hash; // key的hash值
Object key; // 键
Object value; // 值
Entry next; // 下一个节点
Entry(int hash, Object key, Object value, Entry next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
}
早期的HashMap用链表结构解决索引值相同以及hash冲突来存储相同索引但value不同的数据,之所以设计成链表+数组的原因是将数据存的更紧凑,节省内存空间,并且方便扩容。