## 一、寫在前面
相信讀者也看過了不少講解 HashMap 源碼的文章了,筆者認為,一切脫離源碼去講原理的都是泛泛而談。一些所謂的原理大都是閱讀源碼之后的個人概括,這些概括參差不齊,再加上沒有閱讀源碼,讀者們是很難有切身體會的。正因如此,筆者逐行分析了 HashMap 的源碼后,開啟了本場寫作。
筆者在閱讀 HashMap 源碼的時候,曾對每個內部屬性,每個內部方法和方法調用邏輯做了簡要注釋,但在整理成文的時候,還是遇到了略微的困難。對于一些內部屬性的解釋,需要結合它在一些方法的使用中發揮的作用來綜合說明,筆者打算按照從淺到深的順序,先帶讀者熟悉HashMap的宏觀設計思想,再通讀一遍源碼,然后講解源碼的設計細節。要讓讀者邊看文字邊對照源碼進行學習,形成自己的領悟和體會,避免造成筆者一人的泛泛而談。
無論自己的領悟是深是淺,終歸是自己的,無論別人的領悟多么高深,那也是別人的。希望每個讀者都能有自己的收獲和體會。
由于 HashMap 源碼中涉及到較多的位運算的知識,對這方面基礎薄弱的讀者可以閱讀我之前發布在微信公眾號“代碼藝術“的文章。
### Java版本
```java
$ java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
```