一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap

一文搞定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不同的数据,之所以设计成链表+数组的原因是将数据存的更紧凑,节省内存空间,并且方便扩容。

put方法的逻辑流程图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41813208/article/details/107651659
今日推荐