欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaHashMap的大小是多少

本篇內(nèi)容主要講解“Java HashMap的大小是多少”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java HashMap的大小是多少”吧!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鶴崗免費建站歡迎大家使用!

  1. HashMap 的默認大小是 16,這個默認值是可以設(shè)置的。如果事先知道具體的例子,可以修改默認初始大小,減少動態(tài)擴容的次數(shù),提高性能。修改默認初始大小的值時,比如你設(shè)置了 500,那么不會真就使用 500 這個值,而可能會使用 512 這種是 2 的冪的值。

    為什么要設(shè)置是 2 的冪的值?這個跟下面的 index 的值計算有關(guān),請看第 4 點。

  2. 最大的裝載因子為 0.75,當裝載因子超過這個值是就會擴容,每次擴容都會擴容為原來的兩倍大小。

    那么為什么裝載因子是 0.75 呢?經(jīng)研究顯示,負載因子是0.75的時候,空間利用率比較高,而且避免了相當多的 Hash 沖突,使得底層的鏈表或者是紅黑樹的高度比較低,提升了空間效率。

    為啥是擴容為原來的兩倍呢?這個具體請看第 4 點。

  3. 采用鏈表法來解決沖突,之后再 JDK1.8 中引入了紅黑數(shù),主要鏈表長度太長(默認超過8)時,鏈表就轉(zhuǎn)換為紅黑樹。當少于 6 時,又將紅黑樹轉(zhuǎn)換為鏈表,因為紅黑樹要維護平衡,比起鏈表性能上的優(yōu)勢并不會特別明顯。

    那么為什么在少于 6 的時候而不是 8 的時候才將紅黑樹轉(zhuǎn)換為鏈表呢?假設(shè)設(shè)計成大于 8 時鏈表轉(zhuǎn)換為紅黑樹,小于 8 的時候又轉(zhuǎn)換為鏈表。如果一個 hashmap 不停的插入、刪除。hashmap 中的個數(shù)不停地在 8 徘徊,那么就會頻繁的發(fā)生鏈表和紅黑樹之間轉(zhuǎn)換,效率非常低。因此,6 和 8 之間來一個過渡值可以減緩這種情況造成的影響。

  4. 散列值的獲取分兩步走:

    // 1. hash 值的計算
    static final int hash(Object key) {
       int hash;
       return key == null ? 0 : (hash = key.hashCode()) ^ hash >>> 16;
    }

    // 2. 插入/查找的時候,計算 key 應(yīng)該被映射到散列表的什么位置
    int index = hash(key) & (capacity - 1)
        

    其中方法 hashcode() 返回的是 Java 對象的 hash_code,這是一個 int 類型的值(32 位)。那么為什么在拿到這個值之后,還需要將自己右移 16 位與自己進行異或呢?因為容量較小的時候,在計算 index 那邊,真正用到的其實就只有低幾位,假如不融合高低位,那么假設(shè) hashcode() 返回的值都是高位的變動的話,那么很容易造成散列的值都是同一個。但是,假如將高位和低位融合之后,高位的數(shù)據(jù)變動會最終影響到 index 的變換,所以依然可以保持散列的隨機性。

    那么在計算 index 的時候,為什么不使用 hash(key) % capacity 呢?這是因為移位運算相比取余運算會更快。那么為什么 hash(key) & (capacity - 1) 也可以呢?這是因為在 B 是 2 的冪情況下:A % B = A & (B - 1)。如果 A 和 B 進行取余,其實相當于把 A 那些不能被 B 整除的部分保留下來。從二進制的方式來看,其實就是把 A 的低位給保留了下來。B-1 相當于一個“低位掩碼”,而與的操作結(jié)果就是散列值的高位全部置為 0 ,只保留低位,而低位正好是取余之后的值。我們?nèi)€例子,A = 24,B =16,那么 A%B=8,從二進制角度來看 A =11000 ,B = 10000。A 中不能被 B 整除的部分其實就是 1000 這個部分。接下去,我們需要將這部分保留下來的話,其實就是使用 01111 這個掩碼并跟 A 進行與操作,即可將1000 保留下來,作為 index 的值。而 01111 這個值又等于 B-1。所以 A &(B-1)= A%B。但是這個前提是 B 的容量是 2 的冪,那么如何保證呢?我們可以看到,在設(shè)置初始大小的時候,無論你設(shè)置了多少,都會被轉(zhuǎn)換為 2 的冪的一個數(shù)。之外,擴容的時候也是按照 2 倍進行擴容的。所以 B 的值是 2 的冪是沒問題的。

到此,相信大家對“Java HashMap的大小是多少”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

文章名稱:JavaHashMap的大小是多少
文章地址:http://aaarwkj.com/article26/igsdjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄標簽優(yōu)化、自適應(yīng)網(wǎng)站ChatGPT、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
久草视频在线免费资源站 | 中文字幕一区二区精品人妻| 亚洲欧洲日产国码一区| 日韩欧美国产一区二区精品| av中文在线免费观看| 色噜噜色一区二区三区| 四季一区二区三区av| 给我免费在线观看视频| 亚洲一区二区三区熟妇| 日本韩国三级理伦久久久| 麻豆文化传媒免费网址| 国产一区二区三区不卡视频| 国产一区在线视频无卡顿| 国产一区二区精品日韩| 亚洲丰满熟女乱一区二区三区| 国产一区二区精品久久岳√| 成人黄色一级电影免费看| 日本熟妇色在线视频不卡| 性欧美一区二区三区| 91九色午夜在线观看| 亚洲第一国产综合自拍| 欧美 日本国产一区| 免费午夜福利在线观看| 亚洲av香蕉综合一区| 亚洲精品国产高清久久| 日本久久在线观看视频| 美女爽到高潮久久久| 国产不卡高清视频在线| 国产精品区一区二区三区| 日本人妻风俗店中文字幕| 黄片超刺激在线看在线| 视频一区二区中文字幕日韩| 日本久久91跳蛋视频| 一区二区在线视频中文字幕| 欧美午夜福利视频观看| 国产精品乱码精品久久久| 日韩高清不卡免费视频| 国产区一区二区三在线播放| 人妻熟妇av在线一区二区三区| 国产精品三级国产精品高| 一区二区三区都市激情|