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

41 篇文章 2 订阅
29 篇文章 10 订阅

一文搞定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方法的逻辑流程图

在这里插入图片描述

更详细的源码解读看这篇:简化HashMap源码结构

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗水人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值