摘要:前言本文是基于的進行分析,主要是介紹中的成員變量和類變量的用途,以及分析的數據結構。以上為之前版本的的實現,而進行了優化就是當鏈表節點數超過閾值時,則會將鏈表轉化為紅黑樹。
前言
本文是基于Java 8的HashMap進行分析,主要是介紹HashMap中的成員變量和類變量的用途,以及分析HashMap的數據結構。
變量分析在HashMap中存在多個成員變量和類變量,搞清楚它們的用途有助于我們更深入了解HashMap,下面是它們的介紹:
/** * 默認的初始容量,值為2的4次方 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 眾所周知是16 /** * 最大容量 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 默認的負載因子 */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * 將鏈表轉化為紅黑樹的閾值,當鏈表節點數大于或等于該閾值-1則轉化為紅黑樹 */ static final int TREEIFY_THRESHOLD = 8; /** * 將紅黑樹轉化為鏈表的閾值,當紅黑樹的節點小于該閾值時轉化為鏈表 */ static final int UNTREEIFY_THRESHOLD = 6; /** * 允許進行鏈表轉化為紅黑樹的閾值,只有散列表大小大于或等于該值才能進行紅黑樹轉化 */ static final int MIN_TREEIFY_CAPACITY = 64; /** * HashMap中存儲數據的數組,也稱為散列表。 * 長度為2的N次冪 */ transient Node數據結構[] table; /** * 緩存entrySet()方法的值 */ transient Set > entrySet; /** * Map中鍵值對的個數 */ transient int size; /** * HashMap數據結構被改變的次數,一般是指散列表的長度改變、Node鏈表增加或者減少節點 * 這個參數是用于快速失敗機制 */ transient int modCount; /** * 下一次觸發調整大小(resize()方法)的閾值,一般為容量乘以負載因子 */ int threshold; /** * 散列表的負載因子,用于計算擴容的閾值 */ final float loadFactor;
HashMap使用拉鏈法解決哈希表中存在的哈希沖突問題,所以HashMap底層是用以Node(Java 7名稱是Entry)組成的鏈表為元素的數組table來存儲鍵值對,每個Node就是一個鍵值對對象。table稱呼為散列表。
而table對應的是散列表,是因為無論是存儲還是讀取鍵值對的時候,都會對key進行hash%table.length運算來進行散列表的命中,然后操作命中的索引對應的Node鏈表(還是會比較key和hash)。
以上為Java 8之前版本的HashMap的實現,而Java 8進行了優化:就是當鏈表節點數超過閾值TREEIFY_THRESHOLD(8)時,則會將鏈表轉化為紅黑樹。
如果只是使用文字描述的話會很難理解,所以下面會通過一幅圖展示:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77435.html
摘要:高并發訪問數據庫優化方法方法總結執行的過程簡單理解及的區別之區別詳解備忘筆記線程本地存儲的原理和實現分類和原理系列三參數設置分析虛擬內存機制搜索算法集錦關于樹的一些總結中種數據結構的使用場景介紹如何解決包沖突問題中如何將所有引用的包打包到 1、高并發訪問數據庫優化方法 2、 java finalize方法總結、GC執行finalize的過程 3、簡單理解Socket及TCP/IP、Ht...
摘要:高并發訪問數據庫優化方法方法總結執行的過程簡單理解及的區別之區別詳解備忘筆記線程本地存儲的原理和實現分類和原理系列三參數設置分析虛擬內存機制搜索算法集錦關于樹的一些總結中種數據結構的使用場景介紹如何解決包沖突問題中如何將所有引用的包打包到 1、高并發訪問數據庫優化方法 2、 java finalize方法總結、GC執行finalize的過程 3、簡單理解Socket及TCP/IP、Ht...
摘要:習慣在微信看技術文章,想要獲取更多的資源的同學,可以關注微信公眾號。為了大家方便,剛新建了一下群,大家也可以去交流交流。謝謝支持了希望能多介紹給其他有需要的朋友 前言 聲明,本文用得是jdk1.8 前面已經講了Collection的總覽和剖析List集合以及散列表、Map集合、紅黑樹還有HashMap基礎了: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、...
前言 聲明,本文用得是jdk1.8 前面已經講了Collection的總覽和剖析List集合以及散列表、Map集合、紅黑樹的基礎了: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、散列表、紅黑樹介紹 本篇主要講解HashMap,以及涉及到一些與hashtable的比較~ 看這篇文章之前最好是有點數據結構的基礎: Java實現單向鏈表 棧和隊列就是這么簡單 二叉樹就...
摘要:本文會以引出問題為主,后面有時間的話,筆者陸續會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結合自己過往的面試經驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續會抽些重要的知識點進...
閱讀 663·2023-04-26 02:03
閱讀 1037·2021-11-23 09:51
閱讀 1111·2021-10-14 09:42
閱讀 1738·2021-09-13 10:23
閱讀 927·2021-08-27 13:12
閱讀 839·2019-08-30 11:21
閱讀 1001·2019-08-30 11:14
閱讀 1041·2019-08-30 11:09