国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

HashMap剖析之內(nèi)部結(jié)構(gòu)

arashicage / 1196人閱讀

摘要:前言本文是基于的進(jìn)行分析,主要是介紹中的成員變量和類(lèi)變量的用途,以及分析的數(shù)據(jù)結(jié)構(gòu)。以上為之前版本的的實(shí)現(xiàn),而進(jìn)行了優(yōu)化就是當(dāng)鏈表節(jié)點(diǎn)數(shù)超過(guò)閾值時(shí),則會(huì)將鏈表轉(zhuǎn)化為紅黑樹(shù)。

前言

本文是基于Java 8HashMap進(jìn)行分析,主要是介紹HashMap中的成員變量和類(lèi)變量的用途,以及分析HashMap的數(shù)據(jù)結(jié)構(gòu)。

變量分析

HashMap中存在多個(gè)成員變量和類(lèi)變量,搞清楚它們的用途有助于我們更深入了解HashMap,下面是它們的介紹:

    /**
     * 默認(rèn)的初始容量,值為2的4次方
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 眾所周知是16

    /**
     * 最大容量
     */
    static final int MAXIMUM_CAPACITY = 1 << 30;

    /**
     * 默認(rèn)的負(fù)載因子
     */
    static final float DEFAULT_LOAD_FACTOR = 0.75f;

    /**
     * 將鏈表轉(zhuǎn)化為紅黑樹(shù)的閾值,當(dāng)鏈表節(jié)點(diǎn)數(shù)大于或等于該閾值-1則轉(zhuǎn)化為紅黑樹(shù)
     */
    static final int TREEIFY_THRESHOLD = 8;

    /**
     * 將紅黑樹(shù)轉(zhuǎn)化為鏈表的閾值,當(dāng)紅黑樹(shù)的節(jié)點(diǎn)小于該閾值時(shí)轉(zhuǎn)化為鏈表
     */
    static final int UNTREEIFY_THRESHOLD = 6;

    /**
     * 允許進(jìn)行鏈表轉(zhuǎn)化為紅黑樹(shù)的閾值,只有散列表大小大于或等于該值才能進(jìn)行紅黑樹(shù)轉(zhuǎn)化
     */
    static final int MIN_TREEIFY_CAPACITY = 64;
    /**
     * HashMap中存儲(chǔ)數(shù)據(jù)的數(shù)組,也稱(chēng)為散列表。
     * 長(zhǎng)度為2的N次冪
     */
    transient Node[] table;

    /**
     * 緩存entrySet()方法的值
     */
    transient Set> entrySet;

    /**
     * Map中鍵值對(duì)的個(gè)數(shù)
     */
    transient int size;

    /**
     * HashMap數(shù)據(jù)結(jié)構(gòu)被改變的次數(shù),一般是指散列表的長(zhǎng)度改變、Node鏈表增加或者減少節(jié)點(diǎn)
     * 這個(gè)參數(shù)是用于快速失敗機(jī)制
     */
    transient int modCount;

    /**
     * 下一次觸發(fā)調(diào)整大?。╮esize()方法)的閾值,一般為容量乘以負(fù)載因子 
     */
    int threshold;

    /**
     * 散列表的負(fù)載因子,用于計(jì)算擴(kuò)容的閾值
     */
    final float loadFactor;
數(shù)據(jù)結(jié)構(gòu)

HashMap使用拉鏈法解決哈希表中存在的哈希沖突問(wèn)題,所以HashMap底層是用以NodeJava 7名稱(chēng)是Entry)組成的鏈表為元素的數(shù)組table來(lái)存儲(chǔ)鍵值對(duì),每個(gè)Node就是一個(gè)鍵值對(duì)對(duì)象。table稱(chēng)呼為散列表。

table對(duì)應(yīng)的是散列表,是因?yàn)闊o(wú)論是存儲(chǔ)還是讀取鍵值對(duì)的時(shí)候,都會(huì)對(duì)key進(jìn)行hash%table.length運(yùn)算來(lái)進(jìn)行散列表的命中,然后操作命中的索引對(duì)應(yīng)的Node鏈表(還是會(huì)比較keyhash)。

以上為Java 8之前版本的HashMap的實(shí)現(xiàn),而Java 8進(jìn)行了優(yōu)化:就是當(dāng)鏈表節(jié)點(diǎn)數(shù)超過(guò)閾值TREEIFY_THRESHOLD(8)時(shí),則會(huì)將鏈表轉(zhuǎn)化為紅黑樹(shù)。

如果只是使用文字描述的話會(huì)很難理解,所以下面會(huì)通過(guò)一幅圖展示:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/77435.html

相關(guān)文章

  • Java面試重難點(diǎn)剖析

    摘要:高并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)優(yōu)化方法方法總結(jié)執(zhí)行的過(guò)程簡(jiǎn)單理解及的區(qū)別之區(qū)別詳解備忘筆記線程本地存儲(chǔ)的原理和實(shí)現(xiàn)分類(lèi)和原理系列三參數(shù)設(shè)置分析虛擬內(nèi)存機(jī)制搜索算法集錦關(guān)于樹(shù)的一些總結(jié)中種數(shù)據(jù)結(jié)構(gòu)的使用場(chǎng)景介紹如何解決包沖突問(wèn)題中如何將所有引用的包打包到 1、高并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)優(yōu)化方法 2、 java finalize方法總結(jié)、GC執(zhí)行finalize的過(guò)程 3、簡(jiǎn)單理解Socket及TCP/IP、Ht...

    sushi 評(píng)論0 收藏0
  • Java面試重難點(diǎn)剖析

    摘要:高并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)優(yōu)化方法方法總結(jié)執(zhí)行的過(guò)程簡(jiǎn)單理解及的區(qū)別之區(qū)別詳解備忘筆記線程本地存儲(chǔ)的原理和實(shí)現(xiàn)分類(lèi)和原理系列三參數(shù)設(shè)置分析虛擬內(nèi)存機(jī)制搜索算法集錦關(guān)于樹(shù)的一些總結(jié)中種數(shù)據(jù)結(jié)構(gòu)的使用場(chǎng)景介紹如何解決包沖突問(wèn)題中如何將所有引用的包打包到 1、高并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)優(yōu)化方法 2、 java finalize方法總結(jié)、GC執(zhí)行finalize的過(guò)程 3、簡(jiǎn)單理解Socket及TCP/IP、Ht...

    longmon 評(píng)論0 收藏0
  • LinkedHashMap就這么簡(jiǎn)單【源碼剖析

    摘要:習(xí)慣在微信看技術(shù)文章,想要獲取更多的資源的同學(xué),可以關(guān)注微信公眾號(hào)。為了大家方便,剛新建了一下群,大家也可以去交流交流。謝謝支持了希望能多介紹給其他有需要的朋友 前言 聲明,本文用得是jdk1.8 前面已經(jīng)講了Collection的總覽和剖析List集合以及散列表、Map集合、紅黑樹(shù)還有HashMap基礎(chǔ)了: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Map集合、...

    avwu 評(píng)論0 收藏0
  • HashMap就是這么簡(jiǎn)單【源碼剖析

    前言 聲明,本文用得是jdk1.8 前面已經(jīng)講了Collection的總覽和剖析List集合以及散列表、Map集合、紅黑樹(shù)的基礎(chǔ)了: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Map集合、散列表、紅黑樹(shù)介紹 本篇主要講解HashMap,以及涉及到一些與hashtable的比較~ 看這篇文章之前最好是有點(diǎn)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ): Java實(shí)現(xiàn)單向鏈表 棧和隊(duì)列就是這么簡(jiǎn)單 二叉樹(shù)就...

    entner 評(píng)論0 收藏0
  • Java面試通關(guān)要點(diǎn)匯總集

    摘要:本文會(huì)以引出問(wèn)題為主,后面有時(shí)間的話,筆者陸續(xù)會(huì)抽些重要的知識(shí)點(diǎn)進(jìn)行詳細(xì)的剖析與解答。敬請(qǐng)關(guān)注服務(wù)端思維微信公眾號(hào),獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結(jié)合自己過(guò)往的面試經(jīng)驗(yàn),整理了一些核心的知識(shí)清單,幫助讀者更好地回顧與復(fù)習(xí) Java 服務(wù)端核心技術(shù)。本文會(huì)以引出問(wèn)題為主,后面有時(shí)間的話,筆者陸續(xù)會(huì)抽些重要的知識(shí)點(diǎn)進(jìn)...

    gougoujiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<