Code Walkthrough - HashMap

本文是"Code Walkthrough"系列的开篇,深入分析Java经典数据结构HashMap的源代码。作者介绍了HashMap的类结构、作者背景、类变量定义、构造器、内部数据结构以及核心的get、put和remove方法。文章通过逐行解读源码,揭示HashMap的实现原理和效率优化,适合对HashMap有一定了解的读者深入学习。
摘要由CSDN通过智能技术生成


Code Walkthrough是我们新的一个系列,主要以阅读,分析源代码为主要目的,特此介绍一下。我们先以最经典的JDK-HashMap来拆解,相信很多我们极客小伙伴自己也读过源码,不要紧,就当温故而知新吧,况且我们是庖丁解牛,逐行阅读,或许会有新发现。

总目录

  • HashMap总览

  • 作者简介

  • 类变量定义

  • 构造器

  • 内部数据结构

  • hash / index

  • 核心代码

  • 其他代码

  • 总结

HashMap, 无需多介绍,几乎每个Java程序员都使用过,并且可以说几乎每天都差不多要与之接触,或直接使用或间接使用,其重要性可见一斑,我们直接进入正题,让我们来看看这个不算注释不超过1000行的代码如何实现那么多神奇的功能,同时我们可以看看自己项目中的代码,反思一下。这里假设极客朋友们都非常熟悉HashMap本身用法,同时至少知道HashMap是由数组Bucket再加上链表构成,这样我们下面解牛的时候,至少可以区分大腿与小腿骨头了。:)哈哈。

1. HashMap总览

按照我们的习惯,由大局观开始俯视整体架构。当然,前提是我们假设所有人都已经非常清楚HashMap本身的用途,当然类的注释不可少。

包结构:

package java.util;

部分注释:


多么清晰直白啊,实现了Map接口;与Hashtable的核心差异是非同步并且支持null K/V; 简直就是Java必备面试题啊?哈哈。若干年前也经常会在面试中问别人。

类结构总览:


类的总结构比较清晰,继承自AbstractMap, 主要实现了Map接口,以及包含几个构造器。其中核心功能代码都是实现Map接口,包括put/get, entrySet;

好,心里略有把控,我们继续细细拆解。

2. 作者简介

作者及类定义:


老习惯,我们还是要稍微关注一下原作者。我们看到了熟悉的Doug Lea大教授,大名鼎鼎的Java Concurrent包作者,可以参考我们写的Deep Dive - Concurrency,其中有专门篇幅介绍老先生。

还有大名鼎鼎的Josh Bloch, 我们熟悉的整个Java Collection框架,math包都是打造于其之手,可惜后来在Java 1.5 Tiger 2004时,加入了当时如日中天的Google, 并正值当年Google IPO, 想想也不需要可惜,应该说其慧眼,哈哈。

类的定义没有花头,继承AbstractMap, 实现Map, Cloneable, Serializable接口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值